【问题标题】:ng-repeat when data is ready数据准备好时 ng-repeat
【发布时间】:2016-05-13 19:14:54
【问题描述】:

我有一个包含两个网页的网站:

  1. 设置页面:带有如下所示 JSON 内容的网页:

    {"来源":["1","2","3","4"]}

  2. 显示系统中所有已知“来源”的网页。一个接一个地打印出来。

当我的应用程序加载时,我下载了源页面,并保存在我的范围内$scope.Settings.Sources

我的 AngularJS 代码:

$scope.getSettings = function (ID, successCallback, failureCallback)
{
    $scope.ID = ID;

    $http.get("/sources?ID=" + ID).then(function (response)
    {
        if (response.status == 200)
        {
            $scope.Settings = response.data;
            successCallback();
        }
        else
        {
            failureCallback();
        }
    });
}

function getSettings_success()
{
    // Ready to update the ng-repeat NOW.
}

function getSettings_error()
{
    alert('Error');
}

$scope.getSettings(1, getSettings_success, getSettings_error);

现在,当我准备好$scope.Settings.Sources 时,我所要做的就是在特定的 HTML 模板中打印每个来源。因此,我正在考虑使用 ng-repeat 来完成这项任务。像这样的:

<div ng-init="sources=$scope.Settings.Sources">
    <ul>
        <li ng-repeat="source in sources">
            {{ source }}
        </li>
    </ul>
</div>

很遗憾,此代码不起作用。这是因为当页面加载时,$scope.Settings.Sources 还没有准备好。因此,ng-repeat 必须在“源”页面下载后运行。

这可能吗?如果是,怎么做?

【问题讨论】:

    标签: javascript angularjs data-binding angularjs-ng-repeat


    【解决方案1】:

    您不应该在这种情况下使用ng-init,因为数据来自 Ajax,并且您正在将空白对象分配给源。原因还没有回应。相反,我会直接在您的视图上使用 Settings.Sources 变量。

    标记

    <div>
        <ul>
            <li ng-repeat="source in Settings.Sources">
                {{ source }}
            </li>
        </ul>
    </div>
    

    旁注$scope 变量可在 Angular 指令中直接访问,您无需明确指定 $scope

    【讨论】:

    • 这是有效的。谢谢你。但我不明白这是如何工作的?当“Setting.Sources”中有数据时,ng-repeat 如何“知道”?
    • @No1Lives4Ever 已经被角度摘要系统处理了。无论绑定在角度指令内的视图上的变量,评估每个摘要周期的值(在 ajax 完成后,角度运行一个摘要周期和更新绑定)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多