这是一个指令,我试图根据模型值禁用链接:
app.directive('disableable', function($parse){
return {
restrict: 'C',
require: '?ngClick',
link: function (scope, elem, attrs, ngClick) {
if (attrs.disable){
var disable = $parse(attrs.disable);
elem.bind('click', function (e) {
if (disable(scope)){
e.preventDefault();
return false;
}
return true;
});
scope.$watch(disable, function (val) {
if (val){
elem.addClass('disabled');
elem.css('cursor', 'default');
}
else {
elem.removeClass('disabled');
elem.css('cursor', 'pointer');
}
});
}
}
};
});
Run Code Online (Sandbox Code Playgroud)
我希望能够禁用所有链接操作,无论它们是使用简单的href还是ngClick操作.由于preventDefault调用,Hrefs工作正常,但我无法弄清楚如何深入了解ngClick并防止它被触发.我在click事件上执行的绑定不起作用,因为看起来ngClick绑定了我自己无法控制的处理程序.有什么我能做的吗?
jsFiddle:http://jsfiddle.net/KQQD2/2/
我有一个AngularJS指令:
myApp.directive('movie', function(){
return {
restrict: 'E',
replace: true,
scope: { product:'=', codebase: '@' },
template: '<object style="width:550px;height:320px;" name="movie" id="movie" codebase="{{codebase}}"' +
' classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" tabindex="-1">' +
'<param value="{{product.flashURL}}" name="movie">' +
'<param value="true" name="play">' +
'<param value="true" name="menu">' +
'<param value="transparent" name="wmode">' +
'<param value="noscale" name="scale">' +
'<embed wmode="transparent" style="width:550px;height:320px;" src="{{product.flashURL}}" scale="noscale"' +
' pluginspage="http://www.macromedia.com/go/getflashplayer" play="true" name="movieEmbed" menu="true" id="movieEmbed">' +
'</object>'
};});
Run Code Online (Sandbox Code Playgroud)
它是这样使用的:
<movie product="productInScope" codebase="http://flashcodebase..." />
Run Code Online (Sandbox Code Playgroud)
我通过简单地在视图中包含此HTML来制定此指令以解决我遇到的问题,即:呈现对象标记的瞬间,Flash尝试在URL"{{product.flashURL}}处加载电影".这显然是失败的,当Angular绕过插值表达时,已经太晚了.
不幸的是,将其重组为指令并没有帮助解决问题.有趣的是,{{codebase}}表达似乎始终有效; 也许它首先评估,导致Flash加载并尝试获取URL?
您将如何重写此指令(或使用一些更简单的方法),以便在flashURL可用之前不会创建对象标记?