在本文檔中:http://docs.angularjs.org/guide/directive表示指令可以通過控制器相互通信。指令如何通過控制器進行通信?
控制器 - 控制器構造函數。控制器在預鏈接階段之前被實例化,並且如果它們按名稱請求它,則與其他指令共享(請參閱require屬性)。 這允許指令相互溝通並增強彼此的行爲。
我不明白,他們如何與控制器溝通?有沒有任何示例或演示?
在本文檔中:http://docs.angularjs.org/guide/directive表示指令可以通過控制器相互通信。指令如何通過控制器進行通信?
控制器 - 控制器構造函數。控制器在預鏈接階段之前被實例化,並且如果它們按名稱請求它,則與其他指令共享(請參閱require屬性)。 這允許指令相互溝通並增強彼此的行爲。
我不明白,他們如何與控制器溝通?有沒有任何示例或演示?
也許你在使用指令控制器發生路由更改時創建的控制器混淆。該部分只是討論指令控制器,因此該部分的含義是,如果您在同一個HTML元素上有兩個指令,則它們可以通過要求其他每個控制器進行通信。
一個很好的例子就是如果你創建了一個需要與ng-model
溝通的指令。由於ng-model
公開了一個控制器,你可以要求它像這樣:
myApp.directive('myDirective', function() {
return {
require: 'ngModel',
link: function($scope, elem, attrs, ngModelCtrl) {
// Here you can listen to different DOM events, and
// call ngModelCtrl when the model value needs to update
}
}
});
和HTML:
<input type="text" ng-model="myModel" my-directive>
你的指令可以在對象實現它,你的指令函數返回暴露出控制器,像這樣的:
myApp.directive('myDirective1', function() {
return {
link: function($scope, elem, attrs) {
},
controller: function() {
this.sayHello = function() {
alert("hello!");
}
}
}
});
myApp.directive('myDirective2', function() {
return {
require: 'myDirective1',
link: function($scope, elem, attrs, myDirective1Ctrl) {
myDirective1Ctrl.sayHello();
}
}
});
和HTML:
<input type="text" my-directive2 my-directive1>
您也可以通過編寫require: '^myParentDirective'
,像這樣需要從父指令一個指令控制器:
myApp.directive('myDirective1', function() {
return {
link: function($scope, elem, attrs) {
},
controller: function() {
this.sayHello = function() {
alert("hello!");
}
}
}
});
myApp.directive('myDirective2', function() {
return {
require: '^myDirective1',
link: function($scope, elem, attrs, myDirective1Ctrl) {
myDirective1Ctrl.sayHello();
}
}
});
和HTML:
<div my-directive1>
<div my-directive2></div>
</div>
檢查[這個問題](HTTP://計算器。 com/questions/14915332/what-does-require-of-directive-definition-object-take)和[this example](http://jsfiddle.net/bmleite/GSZkJ/)。 – bmleite 2013-03-08 09:11:30
跟上好問題。 – Stewie 2013-03-08 10:39:07
[該示例](http://jsfiddle.net/bmleite/GSZkJ/)有點誤導。乍一看它似乎在共享控制器實例的'num'屬性。當實際發生的唯一事情是內部指令時,將增量函數從外部指令控制器實例複製到內部和外部共享的範圍對象。當它從模板調用這個==範圍對象。看到這個[調整的例子](http://jsfiddle.net/fess/a68Ra/),試圖說明這些觀點。 – 2013-07-16 19:18:28