在控制器中的指令VS中使用.on

时间:2014-10-01 09:29:31

标签: javascript angularjs

什么被认为是最佳实践,将指令附加到控制器内的元素或绑定事件?

指令

<openread-more what-to-expand="teds-bets-readmore" />

myApp.directive('openreadMore', function () {
    return {
        restrict: 'AE',
        replace: false,
        template: '<a class="attach-event" what-to-expand="readmore1">Event</a></span>',
        link: function (scope, elem, attrs) {
            elem.on('click', function () {
                // attached code on click
            });
        }
    }
});

只需将其附加到控制器

homepageCtrls.controller('homepageCtrl', function ($scope, $http) {
    angular.element(document.querySelectorAll('.attach-event')).on('click', function () {
         // attached code on click              
    });
});

第二种选择似乎更短更清洁,但我不知道它是否被认为是最佳做法。

1 个答案:

答案 0 :(得分:0)

只需使用ng-click指令。

<openread-more what-to-expand="teds-bets-readmore" ng-click="doSomeAction()" />

在控制器上:

homepageCtrls.controller('homepageCtrl', function ($scope, $http) {
    $scope.doSomeAction = function() {
       // onClick logic here...
    };
});

修改

如果你绑定了其他类型的事件,只需向自己提出这个问题:“根据当前视图或应用程序状态,我会对此事件有不同的行为吗?”。

如果答案是,那么您应该在控制器上注册事件处理程序。如果答案是(这意味着您将始终具有相同的行为),则注册并处理指令上的事件。

然而,您不应该访问控制器上的UI元素(例如,不要使用选择器或类似的东西)。控制器应该是可重用的,这意味着您应该能够在具有不同UI元素的不同UI上使用它们。最好的方法是定义一个允许绑定特定事件的指令,例如Angular UI Event Binder