【问题标题】:How to assign scope variable inside function that returns data from server?如何在从服务器返回数据的函数内部分配范围变量?
【发布时间】:2016-10-27 16:05:44
【问题描述】:

我有一个在角度控制器中的功能。

scope.asyncInit 在控制器结束时被调用。它是一个初始化数据以供查看的函数。

scope.asyncInit = function() { 范围.phoneData; dsc.In('module-agreements-lists').run('select_agreements_by_value').now('phone').then(function(res) { scope.phoneData = res.result; }); };

我应该从数据库返回数据并将其作为 scope.phoneData 变量。

问题是当我这样使用它时:

scope.asyncInit = function() { 范围.phoneData; dsc.In('module-agreements-lists').run('select_agreements_by_value').now('phone').then(function(res) { scope.phoneData = res.result; console.log(scope.phoneData); }); };

它在控制台日志中显示从服务器返回的数据,但它们在dsc.In('module-agreements-lists').run('select_agreements_by_value').now('phone').then(function(res) ... 之外不可见。

以下代码中的控制台日志以未定义的形式返回到控制台日志 scope.phoneData。

scope.asyncInit = function() { 范围.phoneData; dsc.In('module-agreements-lists').run('select_agreements_by_value').now('phone').then(function(res) { scope.phoneData = res.result; }); console.log(scope.phoneData); };

我在这里错过了什么重要的东西吗?我不知道为什么它不能正常工作。

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    这是因为这是一个异步调用。
    对服务器的异步调用只会运行,而不是等待成功。
    所以代码继续,即使你还没有得到数据。

    你使用.then() 函数来做一些你想在成功后被调用的事情。

    这就是它在第二种方法中记录'undefined' 的原因。数据尚未从服务器到达。

    【讨论】:

    • 因此,当函数内的 console.log 显示从服务器返回的数据时,如果 console.log 在函数外,它会显示未定义,因为数据还没有在浏览器中。但是如何使它起作用呢?即使函数在一段时间后返回数据,它们也不会显示在视图中。我不知道如何使它工作。
    • @A.Dziedziczak 是绑定到 scope.phoneData 的视图吗?
    • 是的:
      ...
    • @A.Dziedziczak 尝试在分配数据后添加scope.$apply();
    • 很抱歉您的解决方案完美运行!它不起作用是我的错。我在 ng-repeat 中添加了错误的模型,所以没有显示任何内容……很抱歉浪费了您的时间。我会接受你的答案作为正确的答案。再次抱歉麻烦..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    • 2018-07-16
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多