angularjs在嵌套指令中继承范围

示例: http://jsfiddle.net/avowkind/PS8UT/

我想要一个嵌套的子指令从其包装父指令获取其数据(如果存在),否则从外部控制器获取.

<div ng-controller="MyCtrl">
    <parent index="1">
        <child></child>
    </parent>
    <parent index="2">
        <child></child>
    </parent>
     <h1>No Parent</h1>
    <child></child>
</div>
<hr>

期望的输出

Parent 1
  Child of parent 1
Parent 2
  Child of parent 2
No Parent
  Child of parent 0

目前我的子对象只看到外部控制器值:

实际输出

Parent 1
  Child of parent 0
Parent 2
  Child of parent 0
No Parent
  Child of parent 0

这是简单的版本;实际上,外部指令从嵌套子项格式化的服务器获取数据,因此传达的是复杂对象而不是简单字符串.
此外,子代是一个可视化,可以处理不同的数据集,因此外部父指令并不总是相同的类型.

更一般地说,我试图获得的模式是使用单独的指令来填充模型并查看它.所以更实际的用法

<temperature-for city="Auckland">
   <plot/>
   <analysis/>
</temperature-for>

<humidity-for city="Hamilton">
   <plot/>
   <analysis/>
</temperature-for>


<test-data>
   <plot/>
</test-data>

解决方法

我个人使用的另一种方法是将绘图和分析指令定义为隔离范围,然后双向绑定所需的输入.

这样,该指令就是完全独立的组件,具有明确的定义接口.我亲自制作了这样的策划指令:

<plot data="countries['Auckland'].plot.data" options="countries['Auckland'].plot.options" legend="external" zoom="xy"></plot>

Scope would look like:
scope: {
    data: '=',options: '=',zoom: '@?',// '?' indicates optional
    legend: '@?',}

这样就不会混淆该组件需要哪些数据才能工作,您可以在指令中编写文档以获取所需的输入属性.

总而言之,这是一种对AngularJS中的大部分用例非常有效的模式,即只要有可重用性的情况.

编辑:只是想补充一点:看看你的HTML,绝对没有迹象表明这些指令的用途,它们可能依赖于任何东西(例如,他们从服务获得所有数据吗?还是取决于父作用域?如果是这样的话,什么范围?)

相关文章

ANGULAR.JS:NG-SELECTANDNG-OPTIONSPS:其实看英文文档比看中...
AngularJS中使用Chart.js制折线图与饼图实例  Chart.js 是...
IE浏览器兼容性后续前言 继续尝试解决IE浏览器兼容性问题,...
Angular实现下拉菜单多选写这篇文章时,引用文章地址如下:h...
在AngularJS应用中集成科大讯飞语音输入功能前言 根据项目...
Angular数据更新不及时问题探讨前言 在修复控制角标正确变...