小编mfe*_*lix的帖子

在自定义指令中禁用ngClick事件处理

这是一个指令,我试图根据模型值禁用链接:

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 angularjs-directive

7
推荐指数
1
解决办法
7178
查看次数

通过<object>标签显示Flash的Angular指令会导致Flash尝试加载{{expression}}

我有一个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可用之前不会创建对象标记?

angularjs angularjs-directive

4
推荐指数
1
解决办法
4431
查看次数

标签 统计

angularjs ×2

angularjs-directive ×2