我正在創建指令以顯示文本中的差異。對於這個指令,我需要幾個按鈕,我已經在指令中分割出來了。一個simpliefied例子是:指示性父指令中的角度指令
.directive('differenceViewer', function($templateCache, $compile) {
return {
restrict: 'E',
scope: {
oldtext: '@',
newtext: '@',
template: '@',
heading: '@',
options: '=',
itemdata: '&',
method: '&'
},
replace: false,
link: (scope, element, attr) => {
element.append(angular.element($compile($templateCache.get(scope.template))(scope)));
}
};
}).directive('diffbutton', function() {
return {
restrict: 'E',
scope: {
method: '&'
},
template: '<button class="btn btn-sm btn-success" ng-click="method()">Rollback</button>',
replace: true,
terminal: true,
link: (scope, element, attr) => {
scope.directiveClick = function(){
console.log("directive method"); // is never called
}
}
}
})
我通過模板編譯腳本的HTML:
<script type="text/ng-template" id="differenceViewer.html">
<div class="ibox-footer">
<div class="row">
<div class="col-md-12">
<diffbutton method="clickedBtn()">Foo</diffbutton>
</div>
</div>
</div>
</script>
凡由differenceViewer
編譯HTML中創建的diffbutton
。
我需要在控制器中調用一個負責創建所有差異視圖的方法。
app.controller('MainCtrl', function($scope) {
$scope.clickedBtn = function() {
console.log('foo'); // is never called
}
})
Here's a plunker顯示該問題。
爲了能夠將指令中的按鈕點擊到控制器方法的指令中,我需要更改哪些內容?
我一直在this question的答案,但仍不能使其工作。
需要注意的是,如果我添加
scope.clickedBtn = function() {console.log("bar");}
到differenceViewer
指令,它被稱爲 - 但我需要調用在控制器的方法來代替。
問題是你沒有將'method'傳遞給'differenceViewer',但是你在'differenceViewer'裏面使用了'clickedBtn',但是在範圍中沒有定義 – BotanMan
No @BananMan如果我在differenceViewer中定義clickedBtn,無法將事件傳遞給控制器 – Michael
這裏是正確的方法 http://plnkr.co/edit/yiJ1S25FH2EPCtoO9nKo?p=preview – BotanMan