我想用用户选择的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'}
}
),
您可以通过使用一个 供应商配方.
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'}
}
)
}
}];
});
使用ngresource动作中的URL参数解决了这个问题,它可以覆盖ngresource启动后的旧值。