Подтвердить что ты не робот

AngularJS связывается с кликом вместо ng-click

Я смотрел на AngularJs и задал вопрос, это моя директива:

myApp.directive("enter", function(){
return{
    restrict: 'A',
    scope:{},
    controller: function($scope){
        $scope.logSomething=function(somevalue){
            console.log(somevalue+" is logged");
        }
    },
    template: '<input type="text" ng-model="myModel">'+
              '<div ng-click="logSomething(myModel)">click me</div>'
}
})

Это работает, но мой вопрос заключается в том, как я могу сделать то же самое, используя привязать нажатие вместо директивы ng-click? Не то, чтобы это было лучше (может быть?), Но для любопытства

он должен включать в себя что-то вроде этого, но не мог получить большую картину:

 function(scope, element, attrs){
    element.bind("click", function(){
        scope.$apply(attrs.enter);
    })
4b9b3361

Ответ 1

Попробуйте следующее:

myApp.directive("enter", function(){
  return{
    restrict: 'A',
    scope:{},
    controller: function($scope){
        $scope.logSomething=function(somevalue){
            console.log(somevalue+" is logged");
        }
    },
    template: '<input type="text" ng-model="myModel">'+
              '<div button>click me</div>'
}
});

myApp.directive("button", function(){   
  return{
    restrict: 'A',
    link: function(scope , element){
       element.bind("click", function(e){
          scope.logSomething( scope.myModel );
       });
    }
}
});

Plunk: http://plnkr.co/edit/RCcrs5?p=preview

Ответ 2

Как вы указали, вы можете просто использовать element.bind:

myApp.directive(
    'clickMe',
    function () {
        return {
            template : '<div>Click me !</div>',
            replace : true,
            link : function (scope, element) {
                element.bind('click', function ()
                {
                    alert('Clicked !');
                });
            },
        };
    }
);

Fiddle

Но, конечно, в вашем случае вы должны использовать ngClick.