请参阅plunker或以下代码
中的此AngularJS示例 我的第一个问题:
在第40行的accordion指令中,为什么范围变量“expandders”在最初在第20行的SomeController中初始化之后重新初始化为空数组,如下所示{?1}}?
我的第二个问题:
为什么他们通过第70和74行的指令范围而不是元素?
如下:
第70行:var expanders = [];
第74行:accordionController.addExpander(scope);
我的第三个问题: 我将所有代码从手风琴控制器移动到扩展器指令的链接功能,应用程序仍然100%工作,为什么他们在父手风琴指令上构建扩展器阵列,如果他们可以在扩展器的链接功能中构建它?请参阅此新plunk
accordionController.gotOpened(scope);
.expander {
border: 1px solid black;
margin: 1px;
width: 250px;
}
.expander > .title {
background-color: black;
color: white;
padding: .1em .3em;
cursor: pointer;
}
.expander > .body {
padding: .1em .3em;
}
答案 0 :(得分:1)
`$scope.expanders` is only visible in the scope of `SomeController`
而指令中的var expander
是指令自身的局部变量。
不要混淆他们两个。把它拿走,因为它们彼此无关。
<body ng-controller='SomeController' >
<accordion>
<expander class='expander'
ng-repeat='expander in expanders' <!-- expanders here refers to $scope.expanders in SomeController that has some data in it -->
expander-title='expander.title'>
{{expander.text}}
</expander>
</accordion>
</body>
回答问题2
因为他们将扩展器的标题传递给addExpander()
函数。
scope: { title:'=expanderTitle' }
。他们已经定义了这样的范围
expander directive
和scope
已经title
回答问题3
这是一般和首选的做法。你不能(不应该)将所有东西都放在一个函数中。