javascript - 无法修改 AngularJS 中工厂方法上的变量

标签 javascript angularjs lifecycle

好吧,首先,澄清一下我对 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 上使用这个变量......

那么关于如何修改我的代码以使其正常工作有什么建议吗?或者有任何有用的文档来了解有关此主题的更多信息?欢迎任何帮助。

非常感谢!

最佳答案

问题是您执行了多个异步调用,但您将它们视为同步调用,异步调用的顺序如下所示:

  1. httpResourceProvider.call - 异步
  2. console.log($scope.serverVersion);//未定义?
  3. httpResourceProvider 完成,解决
  4. 执行解析函数:function(data) { $scope.serverVersion = data; });

因此,依赖于某些异步数据的下一行代码在加载数据之前已经执行,因此是未定义的。

有关 Promise 以及如何正确链接它们的更多信息,我建议您 read this article

关于javascript - 无法修改 AngularJS 中工厂方法上的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34902761/

相关文章:

javascript - 猜数字 – 创建数字范围 JavaScript

javascript - rails : how to create image thumbnails that expand when clicked?

javascript - Voronoi 细胞使用 D3 (v4) 填充函数

angularjs - Angular $apply 不会使用 webix 数据表更新模型属性更改

Android:应用程序的生命周期

javascript - 如何在 VSCode 中启用多行 JS 字符串折叠(隐藏)?

AngularJS 使用 Protractor 提前输入

javascript - 在angularjs中说早上晚上和下午

java - 整个应用程序是否有一个 onPause ?

javascript - React Redux - 渲染时出错,因为期望的 Prop 尚未到达