Angularjs 别名范围

Angularjs aliasing scopes

我还在学习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>

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

我需要的是像 ng-repeat 这样的东西,它允许为 属性 创建一个别名,这样它就可以被覆盖,但没有 "repeat".

我也尝试过以这种方式使用 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>

但只有第二次调用有效

上面的代码应该可以工作,但我在这里看到的唯一遗漏的是,您没有在 ng-include div 以下正确关闭。所以它停止浏览器不会考虑确切的下一个 div & 内部 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 表达式将不会在第二次呈现模板时计算)