我有一個指令,我想與一個控制器作爲一個組件緊密耦合。即使我宣佈要使用控制器,我仍然認爲我遵循了最佳做法,明確地傳遞了我的功能。下面是一個例子:當指令與控制器耦合時,AngularJS不能通過不同的功能
app.js
var app = angular.module('plunker', [])
app
.controller('myCtrl', function($scope) {
$scope.output = '';
$scope.foo = function() {
$scope.output = 'foo';
}
$scope.bar = function() {
$scope.output = 'bar';
}
})
.directive('myDirective', function() {
return {
scope: {
output: '=',
foo: '&',
},
templateUrl: 'template.html',
replace: true,
controller: 'myCtrl',
};
})
template.html
<div>
<button ng-click="foo()">Click Foo</button>
<p>You clicked: <span style="color:red">{{output}}</span></p>
</div>
的index.html
<body>
<my-directive
output="output"
foo="bar()"> <!-- pass in the *bar* function instead of the *foo* function -->
</my-directive>
</body>
PLUN kr:http://plnkr.co/edit/Y4lhxuXbK9YbjAklR7v1?p=preview
在這裏,即使我傳入bar()
函數,當單擊該按鈕時輸出爲'foo'。如果我通過在指令中註釋掉controller: 'myCtrl'
來解耦控制器,則輸出將變爲'bar'。
我以爲我可以聲明控制器,但仍然可以自由地傳遞我希望指令的功能。似乎明確地傳遞這些函數有點多餘,如果該指令只是查找控制器來找到它(我可以不傳遞任何指令,它仍然工作)。
當測試我想將自己的存根函數傳遞給指令時,這是特別有問題的,目前我不能這樣做。
是否有某種方法可以實現我想要的或者我正在做一些根本性錯誤?
任何幫助非常感謝。
編輯我的意思是沒有在html中聲明的控制器。
您的指令和html使用相同的控制器?所以這兩個功能都被定義了。只需從指令 – PSL 2015-02-05 21:23:44
中刪除'controller:'myCtrl','他們是?他們不會是MyCtrl的不同實例嗎? – 2015-02-05 21:24:53
是的,這實際上是我的錯誤。我想消除html中的'ng-controller',abd將指令中的控制器耦合起來。我仍然有同樣的問題。 – 2015-02-05 21:35:49