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'语法 –