簡體   English   中英

Angular-在指令中使用控制器功能

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM