![](/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.