Angularjs别名范围

时间:2016-02-14 17:36:30

标签: javascript angularjs angularjs-ng-repeat ng-repeat angularjs-ng-include

我仍然学习Angular,如果问题是胡说八道,请原谅我

我有一个具有此层次结构的对象:

{
    a : [...],
    b : [{
        a: [...]
    }, {
        ...
    }]
}

这就是我对主要对象的直接子节点和间接子节点具有相同的对象模型。也就是说,这两个属性名为" a"有相同的字段

我构建了一个使用ng-view管理的视图,并认为可以在主控制器和遍历b元素的ng-repeat中调用。但是,我不知道如何更改传递给视图管理的范围" a":

主要观点是这样做的:

<div ng-controller="MainController as ctrl">
    <div ng-include="'subView'"/>
    <div ng-repeat="bElement in ctrl.b">
        <div ng-include="'subView'"/>
    </div>
</div>

在subView中,我可以访问像bElement.a这样的元素,因为我获得了与外部控制器相同的范围。但是如何访问根元素的属性?

我需要的是有类似ng-repeat的东西允许为属性创建一个别名,以便可以覆盖它,但没有&#34;重复&#34;。

我也尝试过这样使用ng-init:

<div ng-controller="MainController as ctrl">
    <div ng-include="'subView'" ng-init="list = ctrl.a"/>
    <div ng-repeat="bElement in ctrl.b">
        <div ng-include="'subView'" ng-init="list = bElement.a"/>
    </div>
</div>

但只有第二次调用才有效

1 个答案:

答案 0 :(得分:2)

上面的代码应该可行,但我在这里看到的唯一遗漏的是,你还没有正确地关闭ng-include div以下。所以它停止浏览器将不会考虑确切的下一个div&amp;内在的ng-repeat div不会渲染。

<div ng-include="'subView'" ng-init="list = ctrl.a"/>

所以它应该正确关闭div,以便浏览器采用相同的下一个元素。

<div ng-include="'subView'" ng-init="list = ctrl.a"></div>

Sample Plunkr上述问题。

在孩子中更新了

Solved working Plunkr list变量。

虽然它会起作用,但我在当前的实现中看到了一些架构威胁,因为当前的实现看起来非常紧密耦合。需求的任何微小变化都可能导致重新开始。由于ng-init将来可能会对您造成伤害。如果假设您的集合将在指定的间隔时间内更新(在ng-init表达式将不会在第二次渲染模板时进行评估)

相关问题