根據AngularJS DOC A /指令控制器是:如何嘲笑所需指令控制器在指令UT
預鏈接階段之前實例化,並且如果他們的名字要求其它與其他指令共享(請參閱require屬性)。這允許指令相互溝通並增強彼此的行爲。
這聽起來不錯,並在用戶界面視圖是由容器和插件的情況下是有用的,widget的鏈接FUNC可以在容器中的指令控制器通過聲明的方式require:^cotnainerDirective
通過。這給出了回調容器行爲的替代方式,而不是依賴於事件的通信。
例如,其作爲下面需要容器控制器的微件的指令:如果所述窗口小部件是生活在容器內
angular.module('platform').directive('widget', [ function () {
return {
restrict: 'E',
transclude: true,
require: '?^container',
replace: true,
scope: {
layout: '=',
model: '='
},
templateUrl: 'js/modules/platform/templates/form-tmpl.html',
link: function (scope, element, iAttrs, requiredCtrl) {
if(requiredCtrl && requiredCtrl.fooMethod){
....
}
}
};
}]);
鏈接函數內的代碼會做額外的工作。代碼工作正常。但是,在對單元測試widget指令進行測試時,很難想出發送模擬容器指令控制器的好方法,因爲它不是通過Angular $注入器服務注入的。
也許,我需要從容器的角度來編寫UT,但這種方式涉及到引導容器指令所需的太多準備工作。任何人都會遇到此問題,並可以在這裏分享一些優點?
[應該在其標題中包含「標籤」嗎?](http://meta.stackexchange.com/a/130208/218539)可能不是。 – timss 2013-05-13 02:25:34
好聽。你可以發佈這個答案並接受它,這樣問題可以被標記爲解決:-) – timss 2013-05-15 17:30:13