首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >$set(‘ngClick’,functionName + '()');不再在角1.2rc3中工作

$set(‘ngClick’,functionName + '()');不再在角1.2rc3中工作
EN

Stack Overflow用户
提问于 2013-10-24 17:48:27
回答 2查看 783关注 0票数 5

我有一个开源项目,我正在升级到使用角1.2rc3。本质上,它处理表单按钮上的承诺。在这个plnkr http://plnkr.co/edit/vQd97YEpYO20YHSuHnN0?p=preview中,您应该能够单击右侧的"Save“,并看到控制台中出现了一个”单击“,因为它应该在指令中执行以下代码:

代码语言:javascript
复制
            scope[functionName] = function () {
                console.log('clicked');
                //if it's already busy, don't accept a new click
                if (scope.busy === true) {
                    return;
                }

                scope.busy = true;
                var ret = scope.$eval(onClick);
                if (angular.isDefined(ret) && ret.hasOwnProperty('then')) {
                    ret.then(function () {
                        scope.busy = false;
                    });
                }
            };

使用1.2,此方法不再被执行,尽管正在执行以下代码:

代码语言:javascript
复制
            if (angular.isDefined(attrs.ngClick)) {
                console.log('test');
                attrs.$set('ngClick', functionName + '()');
            }

我不知道为什么这个函数不能执行.有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-29 04:25:21

在角1.2中的一些指令优先级变了 (参见“破坏变化”)。下面是一个更新柱塞,它简单地在angular-form-ui.js中设置繁忙按钮指令的负优先级。

代码语言:javascript
复制
restrict: 'A',
priority: -100, // <-- This is the only change I made
controller: ...

这导致替换ngClick属性值的指令在ngClick指令使用属性值到使用$parse创建函数指针之前执行。

票数 3
EN

Stack Overflow用户

发布于 2013-10-29 07:25:59

您确实不应该修改链接函数中的ng-click属性。我认为这是一个侥幸,它曾经对你有效,而修改优先级是一个黑客。我认为有一个更简单的方法来做你想要做的事情。看一看修改过的柱塞:

http://plnkr.co/edit/EypQbCc5wpw5xBWSiVuA?p=preview

我修改了您的指令,使之成为繁忙的单击,并完全取代ng单击。使用和操作ng单击是没有意义的(这是一个非常简单的指令)。如果你有任何问题,请告诉我。

顺便说一句,如果您确实需要添加或修改指令,您将通过编译函数来完成这一任务,而不是通过链接函数。

代码语言:javascript
复制
    directive('busyClick', function () {
    return {
        restrict: 'A',
        scope:{
          busyClick: '&',
          busyText: '@'
        },
        link: function (scope, el, attrs) {

            el.on('click', function(){
                scope.$apply(function(){

                  console.log('clicked');
                  //if it's already busy, don't accept a new click
                  if (scope.busy === true) {
                    return;
                  }
                  setBusy();
                  var ret = scope.busyClick();
                  if (angular.isDefined(ret) && ret.hasOwnProperty('then')) {
                    ret.then(function () {
                        setNotBusy();
                    });
                  }

                });

            });

            var originalText = el.text();

            function setBusy(){
              scope.busy = true;
              el.addClass('busy')
              if(angular.isDefined(scope.busyText)){
                el.text(scope.busyText);
              }
            }

            function setNotBusy(){
              scope.busy = false;
              el.removeClass('busy')
              el.text(originalText);
            }
        }
    };
});
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19572954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档