改变Ionic中AngularJS ngresource的URLIP。

问题描述 投票:0回答:2

我想用用户选择的IP地址来多次更改REST URL,可能会有serval服务器的IP地址,但在应用启动后立即加载工厂文件,IP地址($rootScope.baseURL)无法更改。

有什么办法可以让我再次更改路径?

P.S. console.log($rootScope.baseURL)可以成功输出值,但在返回部分之后,就不行了。

控制器。

$scope.authenticateUser = function(){
      $rootScope.$broadcast('ipChanged', $scope.user.ip);
}

工厂:

.factory( 'Models', function ($rootScope, $resource, Constants) {

        $rootScope.$on('ipChanged', function(event, data) {
            $rootScope.baseURL = "http://" + data + "/rest"
            console.log("$rootScope.baseURL")
        });

     return{
            appMaster_user_session: $resource($rootScope.baseURL + '/user/session',
                {
                    app_name: Constants.API.appName
                },
                {
                    'post': {method:'POST'},
                    'put': {method: 'PUT'}
                }
            ),
angularjs ionic-framework resources factory ngresource
2个回答
0
投票

您可以通过使用一个 供应商配方.

myApp.provider('Models', function ModelsProvider() {
  var apiUrl = 'http://www.deafault.com';

  this.apiUrl = function(value) {
    apiUrl = value;
  };

  this.$get = [function modelsFactory() {
    return {
        appMaster_user_session: $resource(apiUrl  + '/user/session',
            {
                app_name: Constants.API.appName
            },
            {
                'post': {method:'POST'},
                'put': {method: 'PUT'}
            }
        )
     }
  }];
});

你需要在模块的config部分设置apiUrl。

如果你想每次都得到一个不同的url,你可以让这个资源包含一个接收apiUrl的函数。

myApp.provider('Models', function ModelsProvider() { 
  this.$get = [function modelsFactory() {
    return {
        getSessionResource: function(apiUrl) {
          return $resource(apiUrl  + '/user/session',
            {
                app_name: Constants.API.appName
            },
            {
                'post': {method:'POST'},
                'put': {method: 'PUT'}
            }
        )
     }
  }];
});

0
投票

使用ngresource动作中的URL参数解决了这个问题,它可以覆盖ngresource启动后的旧值。

© www.soinside.com 2019 - 2024. All rights reserved.