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
中提交了一个问题
我想我疯了
我正在开发中型 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
中提交了一个问题