繁体   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