0
我看过这个video,我有一个问题,我找不到答案。有一个plunker http://plnkr.co/edit/L8OMoB?p=previewAngularJS指令链接功能执行顺序与要求
HTML
<div ng-app="app">
<div ng-controller="MyCtrl">
<my-select-view on="color">
<my-view label="Red" value="red"><span class="red-text">Red Content</span></my-view>
<my-view label="Blue" value="blue"><span class="blue-text">Blue Content</span></my-view>
<my-view label="Green" value="green"><span class="green-text">Green Content</span></my-view>
<my-view label="Something" value="something"><span class="something-text">Something Content</span></my-view>
</my-select-view>
</div>
</div>
JS
angular.module('app', ['ngSanitize'])
.directive("mySelectView", function($compile) {
return {
restrict: "E",
scope: { item : "=on"},
controller: function($scope, $element) {
$scope.views = [];
this.addView = function(label, value, content) {
$scope.views.push({ label: label, value: value, content: content });
}
},
link: function(scope, element, attrs, ctrl) {
var selectTpl = "<select ng-model='item'" +
" ng-options='view.value as view.label for view in views'" +
" ng-change='changeView()'></select>";
...
}
}
})
.directive("myView", function() {
return {
restrict: "E",
require: "^mySelectView",
link: function(scope, element, attrs, ctrl) {
ctrl.addView(attrs.label, attrs.value, element.html());
}
};
})
.controller("MyCtrl", function($scope) {
$scope.color = "something";
});
我想知道的一件事。我们得到了指令“mySelectView”,其中包含“链接”功能。这个“链接”功能依赖于要被定义的“视图”变量并包含某些内容。
它获得它的唯一方法是通过调用其他指令“myView”上的“链接”函数。该指令对先前的指令有一个require参数。
所以我的问题是:指令“myView”的“链接”功能后,如何执行指令“mySelectView”的“链接”功能。我假设这是因为需要$ scope.views的“ng-option”属性才能正确显示内容。这意味着“myView”的链接功能可以执行并添加视图。
但是如何?谁决定这个命令?为什么第一个指令的“链接”功能只是因为未定义的$ scope.views而不快乐地失败?
任何帮助,将不胜感激!
感谢链接的执行顺序上的问题 - 我会让我的研究 –