将自定义控制器传递给角度指令

时间:2015-05-11 16:27:00

标签: angularjs angularjs-directive

我有一个看起来像这样的指令

<list source="userList" avatar-url="avatarPath" search="search"></list>

并且定义了这个:

    .directive('list', function($rootScope) {

        return {
            restrict: 'E',
            transclude: true,
            templateUrl: 'templates/list.html',
            scope: {
                source:'=',
                search:'=',
                avatarUrl:'='
            }
        }

    })

有没有办法在这个指令smth中指定我想要使用的控制器:

    <list source="userList" avatar-url="avatarPath" search="search" controller="listCtrl"></list>
    <list source="userList" avatar-url="avatarPath" search="search" controller="adminListCtrl"></list>

1 个答案:

答案 0 :(得分:0)

据我了解,您可以在每个控制器中调用两个不同的函数。

我会这样做:

使用ng-controller =&#34; yourControllerName&#34;制作div并在里面使用指令 并只传递函数名称

类似的东西:

<div ng-controller="listCtrl">
    <list source="userList" avatar-url="avatarPath" search="search" function-to-call="someFunctionNameInUserList()"></list>
</div>
<div ng-controller="adminListCtrl">
    <list source="userList" avatar-url="avatarPath" search="search" function-to-call="someFunctionNameInAdminListCtrl()"></list>
</div>

在指令中添加functionToCall:

scope: {
    source:'=',
    search:'=',
    avatarUrl:'=',
    functionToCall : '='
}

现在在ng-click或ng-submit或任何你需要的地方使用指令模板中的functionToCall()

希望你明白我的观点。在我们的项目中工作正常。