0
開始:我沒有錯誤,但嘗試優化我的代碼。Angular - 在指令中使用控制器功能
我有一個應用程序,在很多情況下,地址會顯示。這個地址在許多情況下應該是可編輯的。所以我創建了一個指令。
我的指令
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 });
}
}
};
});
我的指令模板(地址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()
我的指令,所有的時間。是否可以在我的指令控制器中使用此功能?這樣每次我使用這個指令,它會使用如下:
<div ng-controller="AddressController as AddressCtrl">
<addressview
address="OfficeCtrl.office.address">
</addressview>
</div>
無關你的問題,但兩件事情: 你正在使用'取代:TRUE'屬性,它被廢棄了。不要再使用它了。你在哪個角度版本? 此外,你可以使用組件而不是指令,檢查出來:[組件](https://docs.angularjs.org/guide/component) –
另外,請[不要在你的html中使用ng-controller ](https://teropa.info/blog/2014/10/24/how-ive-improved-my-angular-apps-by-banning-ng-controller.html),不要使用範圍,而是如果您想改進您的代碼,請使用'controllerAs'語法 –