javascript - 简单 Ng-Repeat(不重复)场景指令 TemplateUrl

标签 javascript angularjs directive angularjs-ng-repeat

使用简单指令关闭

我有一个简单的闭包,它有几个属性 hello 和 items。当我绑定(bind) hello world 时工作正常,但当我使用 ng-repeat 时列表不会呈现。

(function() {
    var app = angular.module('safety-plus-task-list', []);

    app.directive('taskList', function () {
        return {
            restrict: "E",
            templateUrl: "/Task/TaskList",
            scope: {

            },
            controller: function ($http, $scope, $element, $attrs) {
                this.hello = "HELLO WORLD";
                this.items = [
                    "gravida nisl, id fringilla neque ante vel mi.",
                    "quam gravida nisl, id fringilla neque ante vel mi."];
            },
            controllerAs: "task"
        };
    });
})();

指令内部代码

这是用于呈现自定义指令的代码。 hello 变量显示正确,但项目根本没有渲染。如果列表中有一项,则会显示该项目。

{{ task.hello }}
<div ng-repeat="item in task.items">
    <div> {{ item }} </div>
</div>

渲染图像

enter image description here

相同的字符串打破循环

这似乎是不直观的行为。你自己尝试一下吧。我更改了示例中的一个字母,模板按预期呈现。

谁能告诉我为什么会这样?

Example的代码。此代码会产生不同的结果,并且由于某种原因不起作用,除非您添加“$scope”前缀而不是“this”,如 enter link description here 中所示。 。更令人困惑的是,范围版本实际上不会产生本文所描述的问题。

最佳答案

ngRepeat 期望 items 是不同的对象(通过 === 进行比较)。
由于字符串是基元,因此 2 个相同的字符串被视为相等/相同。

您可以使用track by来指示ngRepeat比较其他内容,例如索引:

ng-repeat="item in task.items track by $index"

关于javascript - 简单 Ng-Repeat(不重复)场景指令 TemplateUrl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24034430/

相关文章:

javascript - 回调内变量的范围

javascript - GraphQL处理数组json数据

javascript - SignalR 身份验证 - 处理未授权的情况

Angular 4 - 如何在模糊时调用自定义验证器?

javascript - 从指令中观察表达式

javascript - 未捕获的类型错误 : Cannot read property 'style' of null at frame

javascript - Protractor E2E测试错误: Object [object Object] has no method 'getWindowHandle'

javascript - 将 AngularJS 与 SpringMVC 结合使用 - 为什么以及如何?

jquery - 不想使用 printThis 库显示打印预览弹出窗口

javascript - 已知的 JavaScript 指令