Angular 在 chrome 中点击自动射击

Angular in chrome auto-firing ng-click

我想我疯了

我正在开发中型 angular 应用程序。今天早上我进来并重新启动,现在 angular 似乎在状态加载时执行每个 ng-click 函数(我正在使用 $stateProvider)。绝对不是昨天发生的。

在 canary、ie 或 FF 中不会发生。只是香草 chrome(我在 43.0.2357.124 m)

如果我退出其中一个 ng-click 调用,它会将我转储到 angular.js:10555

functionCall: function(fn, contextGetter) {
    var argsFn = [];
    if (this.peekToken().text !== ')') {
      do {
        argsFn.push(this.expression());
      } while (this.expect(','));
    }
    this.consume(')');

    var parser = this;

    return function(scope, locals) {
      var args = [];
      var context = contextGetter ? contextGetter(scope, locals) : scope;

      for (var i = 0; i < argsFn.length; i++) {
        args.push(argsFn[i](scope, locals));
      }
      var fnPtr = fn(scope, locals, context) || noop;

      ensureSafeObject(context, parser.text);
      ensureSafeObject(fnPtr, parser.text);

      // IE stupidity! (IE doesn't have apply for some native functions)

//vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvRIGHT HEREvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
      var v = fnPtr.apply
            ? fnPtr.apply(context, args)
            : fnPtr(args[0], args[1], args[2], args[3], args[4]);
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^RIGHT HERE^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      return ensureSafeObject(v, parser.text);
    };
  }

(因为问题出在 chrome 中,它命中 fnPtr.apply(上下文,参数),这是 运行 我的 ng-clicks)

完全加载后,一切正常。就好像当它链接我的 ng-clicks 时它正在执行它们!

它是 'running' 每个范围内的 ng-clicks。无论是在 'master controller' 中还是在我加载的任何状态下的指令(它使日期选择器变得绝对疯狂)

在范围之间来回切换不会重新触发未清理的 ng-clicks(例如导航栏按钮)。但是加载的任何新元素都容易受到影响。

我撤消了足够早的更改,我确信我所做的任何奇怪的事情都应该消失。

我打算再花几个小时,然后尝试在一个最小的例子中重新创建,但我希望这是一个 chrome-update(尽管 none 我的另一个angular 应用程序遇到此问题:/)


我的印象是上面的 functionCall 方法应该是 运行ning,并返回一个函数,当我实际点击时它会被调用,但它正在执行它以及 'linking' 它以备后用正在执行。


更新 #1 - 我在上面的函数中插入了一个 console.log 来吐出它试图解析的内容

好的,在金丝雀中(我假设 FF 和 IE):只有非点击-y angular-y 的东西通过上面的 functionCall 函数得到 运行(比如

<button title="{{'Edit '+myCoolName.replace('_', ')}}"... </button>

但是,在 chrome 中:上述 AND ng-clicks 通过该函数获得 运行。

已加载:btTypeName.replace('', ' ')
已加载:((!newModel.author) ? "Create New " : ("Edit "+newModel.author+"'s ")) + btTypeName.replace('
', ' ')
已加载:btTypeName.replace('', ' ')
已加载:((!newModel.author) ? "Create New " : ("Edit "+newModel.author+"'s ")) + btTypeName.replace('
', ' ')
已加载:openReports(); <---- 这不应该在这里 :o

亲爱的主,我想通了。

AngularJS Batarang 发布了一个新的更新,它杀死了一切。删除它,一切都像新的一样好(像旧的一样好?)无论如何...

貌似是昨天(6/18/15)发布的版本:0.8.0负责。

我在 github、https://github.com/angular/angularjs-batarang/issues/227

中提交了一个问题