我對此的建議是使用require
配置選項和selectable
指令中的控制器來公開selected
屬性。代碼的輪廓:
app.directive('selectable', function() {
return {
...
controller: function($scope, $element) {
var self = this;
this.selected = false; // (1)
$element.on('...', function() {
$scope.$apply(function() {
self.selected = ... // (2)
});
});
}
};
});
app.directive('remoteAction', function() {
return {
...
require: '?selectable', // (3)
link: function(scope, elem, attrs, selectableCtrl) {
if(selectableCtrl !== null) { // (4)
scope.$watch(// (5)
function() {
return selectableCtrl.selected;
},
function(newval, oldval) {
...
}
);
}
}
};
});
說明:
- 的
selectable
指令具有控制器暴露出selected
屬性
- 的
selected
屬性,都會根據一些邏輯更新 - 在上面的例子中,當DOM事件發生
remoteAction
指令可選地要求selectable
指令位於同一元素中
- 角傳遞
null
作爲控制器,如果協作指令沒有找到
- 的
remoteAction
指令手錶selected
屬性的值,並採取措施相應
這將使視圖/ HTML沒有官方記錄,雖然,並將捆綁2個無關的指令。如果遠程操作的另一個用法想要使用不同的屬性呢? –
單個元素上的指令共享他們的'$ attrs'。你可以使用這個,即一個人看着attrs,另一個爲它設置值。我仍然認爲它與合作指令相比更加清潔,或許它不是應該共享的「可選擇」,而是另一種通用指令 - 也可能是我沒有正確理解你的需求。 –
這是我關於合作指令的想法:http://jsfiddle.net/om0c875j/1/ - 'selectable'和'remoteAction'依賴'attributeHolder'來配合,但視圖是「正式記錄」。 –