我为网络创建了一个角度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,它无效。
答案 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();
}
})
}
} );
}
} });
如果有人知道我应该做什么......?