如何优先考虑ng-click事件的自定义事件?

时间:2013-12-24 13:54:28

标签: javascript angularjs events angularjs-directive

我为网络创建了一个角度js app。 我添加了一个输入文本框,我添加了一个ng-on-blur事件。

因为我在使用ng-blur时出现问题,所以我采用了自定义模式: 它在我的代码中看起来像这样:

app.directive('ngOnBlur', function($parse){
    return function(scope, elm, attrs){
            var onBlurFunction = $parse(attrs['ngOnBlur']);
            elm.bind("blur", function(event) {
                scope.$apply(function() {
                    onBlurFunction(scope, { $event: event });
                })});
    };
});

问题是当我填写文本框并点击我的应用程序中的其他按钮(触发点击),即, ng-on-blur根本不会触发,我立即进入点击事件。

如何更改自定义事件的优先级?

html看起来像这样:

<input type="text"  ng-model="x.y" ng-on-blur="doSomething()" />

我想提一下,我添加了优先级:100,它无效。

2 个答案:

答案 0 :(得分:1)

  

如何更改自定义事件的优先级?

您可以为自己编写的自定义指令提供priority。默认情况下有0

但你可以这样试试:

<强> HTML

<input type="text"  ng-model="x.y" on-blur="doSomething()" />

     <button ng-click="init();">press  me</button>

<强> JS

app.controller('fessCntrl', function ($scope) {
    $scope.doSomething = function(){
       console.log('doSomething');
    };

     $scope.init = function(){
       console.log('init');
    };
});

app.$inject = ['$scope'];

app.directive('onBlur', function() {
    return {
            restrict: 'A',           
            link: function(scope, elm, attrs) {
                    elm.bind('blur', function() {
                            scope.$apply(attrs.onBlur);
                    });
            }
    };
});

演示 Fiddle

答案 1 :(得分:0)

我现在想,我知道它为什么不起作用。

当我点击活动时。该事件是关于jquery ui的可排序元素。 也许可分类改变了优先级?

我点击看似如下的可拖动元素:

<ul my-sortable id="sortable">
    <li ng-repeat="item in items">
        <div ng-switch on="item.type">
             <div ng-switch-when ="x" ng-click="doSomething"></div>
        </div>
    </li>
 </ul>

我的可排序代码:

app.directive('mySortable',function(){
return {
link:function(scope,el,attrs){
  el.sortable({
    revert: true,
    stop: function(event,ui){
        ui.item.height("auto");
    }
  });
  el.disableSelection();

  el.on( "sortdeactivate", function( event, ui ) {
    var from = angular.element(ui.item).scope().$index;
    var to = el.children().index(ui.item);
    console.log(from);
    console.log(to);
    if(to>=0){
      scope.$apply(function(){
        if(from>=0){
          scope.$emit('my-sorted', {from:from,to:to});
        }else{
          scope.$emit('my-created', {to:to, index:angular.element(ui.item).attr("data-index")});
          ui.item.remove();
        }
      })
    }
  } );
}

}      });

如果有人知道我应该做什么......?