我已经从AngularJS应用程序中更改了$ http> URL参数
$http({ method:'POST',
url:'http://localhost/api/clients.php'
}).success(function(data,status,headers,config){
deferred.resolve(data);
}).error(function(data,status,headers,config){
deferred.reject(status);
});
至
$http({ method:'POST',
url: ConfigService.Urls.Clients
}).success(function(data,status,headers,config){
deferred.resolve(data);
}).error(function(data,status,headers,config){
deferred.reject(status);
});
ConfigService如下:
Urls: {},
loadUrls: function(){
Urls.Clients = 'http://localhost/api/clients.php';
}
当然,在通过.Resolve加载 Controller 之前,我会先调用loadUrls,因此我100%确定Urls.Clients不为null。
完成此更改后,我开始出现错误:
TypeError: Cannot read property 'protocol' of undefined
at urlIsSameOrigin (http://localhost/myapp/app/lib/angular/angular.js:13710:17)
at $http (http://localhost/myapp/app/lib/angular/angular.js:7508:23)
令人困惑的是该应用程序正常运行,除了我得到的错误之外……有人可以告诉我我在做什么错吗?以及为什么如果应用程序已经可以正常运行而出现此错误的原因。
最佳答案
这显然是订单问题。首次运行loadUrls
调用之后,才会调用$http
。这可能是因为 Controller 不一定按您期望的顺序加载-您不能指望路由提供者在运行其他 Controller 之前打开和启动home Controller -这将仅取决于设置方式。考虑到您在此处提供的代码量,很难说到底是哪里出错了。
请记住,您有一些常规选项可以解决此问题:
loadUrls()
请求之前,请始终调用$http
。这不是很优雅,但可以解决$http
调用,然后在该包装器中调用loadUrls()
。这比以前的稍好一点,因为如果您需要更改loadUrls()
或确保仅一次调用它,则以后可以实现该逻辑。 angular.module('myModule', []).
config(function(injectables) {
// provider-injector
// This is an example of config block.
// You can have as many of these as you want.
// You can only inject Providers (not instances)
// into config blocks.
}).
您可以使用此代码或运行代码块初始化所需的内容
我确定还有其他选择,具体取决于代码的结构,但希望这至少可以帮助您入门。祝你好运!