2015-04-01 42 views
0

我想用用戶選擇的IP地址多次更改REST URL,它可能有服務器的IP地址,但是在工廠文件被立即加載後應用程序啓動時,IP地址($ rootScope.baseURL)無法更改。更改離子狀態下的angularjs ngresource的URL/IP

有反正我可以改變路徑嗎?

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'} 
       } 
      ), 

回答

0

,您可以撥打服務配置使用provider recipe

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'} 
      } 
     ) 
    } 
    }]; 
}); 

您需要在模塊的配置部分設置apiUrl。

如果你想獲得一個不同的網址,每次你可以讓這個資源包含一個接收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參數解決了此問題,它可以在啓動ng資源之後覆蓋舊值。