![](/img/trans.png)
[英]How to pass the parameters from directive to function in controller using Angular Js 1
[英]Angular - Using a controller function in directive
開始:我沒有錯誤,但是嘗試在這里優化我的代碼。
我有一個在許多情況下會顯示地址的應用程序。 在許多情況下,此地址應可編輯。 所以我創建了一條指令。
我的指令
app.directive('addressview', function(medipracticeData) {
return {
restrict: 'E',
templateUrl: 'address-view.html',
replace : true,
scope : {
address : '=',
editAddress : '&?'
},
controller : function($scope){
$scope.edit = function(){
$scope.editAddress( { address : $scope.address } );
}
}
};
});
我的指令模板(address-view.html)
<div ng-controller="AddressController as AddressCtrl">
<addressview
address="OfficeCtrl.office.address"
edit-address="AddressCtrl.showAddressEdit(address)">
</addressview>
</div>
如您所見,我在每個指令中傳遞了AddressCtrl.showAddressEdit()
函數。這是我的地址控制器中的函數,它將觸發一個彈出窗口,我可以在其中編輯地址。
我的控制器
app.controller("AddressController", AddressController);
AddressController.$inject = ["$scope"];
function AddressController($scope) {
var avm = this;
avm.showAddressEdit = showAddressEdit;
function showAddressEdit(address) {
console.log(address);
}
}
我試圖避免AddressCtrl.showAddressEdit()
將此函數AddressCtrl.showAddressEdit()
傳遞給我的指令。 是否可以在我的指令控制器中使用此功能? 這樣,每當我使用此指令時,它就可以按以下方式使用:
<div ng-controller="AddressController as AddressCtrl">
<addressview
address="OfficeCtrl.office.address">
</addressview>
</div>
您可以像這樣使用服務
angular.module("myModule").service("myService", function(){
return {
showAddressEdit: function(address) {
console.log(address);
}
};
});
然后,您可以將其注入到指令/組件中的控制器中,如下所示:
// ...
controller : function($scope, myService){
$scope.edit = function(){
$scope.editAddress( { address : $scope.address } );
}
$scope.showAdressEdit = myService.showAdressEdit;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.