好吧,首先,澄清一下我对 AngularJS 非常陌生。我尝试搜索对其他答案有帮助的内容,但找不到任何可以解决我的问题的内容。
听说是这样。我正在启动一个“测试项目”来提高我的 Angular 技能。 到目前为止,我可以从 Rest 服务获取 JSON。我的下一步是获取它,但从配置文件加载 URL。我正在以一种非常简单的方式进行操作,只需从本地服务器获取配置文件,因为它是存储在那里的 JSON 文件。
我当然知道问题在于理解变量的生命周期。但在阅读了一些文档之后,没有什么新内容......
这是我的 Controller :
app.controller('LoginController', [
'$scope',
'props', //this gets the properties file (json)
'HttpResourceProvider', //this gets any json from a rest service
function($scope, props, httpResourceProvider) {
var myData;
props.success(function(data) {
console.log("1: "+myData); //undefined
serverVersion = myData;
console.log("2: "+myData); //defined
});
console.log("3: "+myData); //undefined
httpResourceProvider.call(
"http://localhost:8080/.../2.5", //instead of 2.5,
//here should go the constant myData.version
function(data) {
$scope.serverVersion = data;
});
console.log($scope.serverVersion); //undefined?
$scope.date = new Date();
$scope.login = function() {
console.log("hey" + $scope.user + " " + $scope.password);
};
} ]);
问题出在“props”工厂上,我不知道如何修改全局变量“myData”,因为当然函数中的“myData”变量只是一个不同的变量。
实际上,我在另一个工厂方法“httpResourceProvider”之后放置了另一个console.log来查看$scope.serverVersion的结果和同样的问题!在这里我印象非常深刻,因为我当然可以在 View 上使用这个变量......
那么关于如何修改我的代码以使其正常工作有什么建议吗?或者有任何有用的文档来了解有关此主题的更多信息?欢迎任何帮助。
非常感谢!
最佳答案
问题是您执行了多个异步调用,但您将它们视为同步调用,异步调用的顺序如下所示:
httpResourceProvider.call - 异步
console.log($scope.serverVersion);//未定义?
httpResourceProvider
完成,解决- 执行解析函数:
function(data) { $scope.serverVersion = data; });
因此,依赖于某些异步数据的下一行代码在加载数据之前已经执行,因此是未定义的。
有关 Promise 以及如何正确链接它们的更多信息,我建议您 read this article 。
关于javascript - 无法修改 AngularJS 中工厂方法上的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34902761/