開始するにはエラーは発生していませんが、コードを最適化しようとしています。角度 - 指令のコントローラー機能を使用
多くの場合、住所が表示されるアプリケーションがあります。このアドレスは多くの場合編集可能でなければなりません。そこで私は指令を作成しました。
マイディレクティブ
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>
が、2つのこと: あなたは '置き換える使用している:廃止されましたtrue'の属性を、このようなコンポーネント。もう使用しないでください。どの角度バージョンをお使いですか? また、ディレクティブの代わりにコンポーネントを使用することもできます。[components](https://docs.angularjs.org/guide/component) –
また、[ng-controllerをHTMLで使用しないでください](https://teropa.info/blog/2014/10/24/how-ive-improved-my-angular-apps-by-banning-ng-controller.html)、スコープを使用せず、むしろコードを改善したい場合は、 'controllerAs'構文を使用してください –