Angularjs 扩展$scope
我试图在AngularJS中创建一些对$scope服务普遍有用的扩展: (此代码在所有控制器之外定义):Angularjs 扩展$scope,angularjs,scope,Angularjs,Scope,我试图在AngularJS中创建一些对$scope服务普遍有用的扩展: (此代码在所有控制器之外定义): 第一个扩展名为safeApply(),可以工作,但是当我在上面的代码中添加alertOn()时,即使没有调用$scope.alertOn(),我的应用程序也不再工作。我一辈子都看不出我做错了什么。我的错误隐藏在显而易见的地方,这是不是很明显?on->$on如前所述 及 应该是: $scope.$apply(fn); var phase = $scope.$root.$$phase; //
第一个扩展名为
safeApply()
,可以工作,但是当我在上面的代码中添加alertOn()
时,即使没有调用$scope.alertOn()
,我的应用程序也不再工作。我一辈子都看不出我做错了什么。我的错误隐藏在显而易见的地方,这是不是很明显?on->$on
如前所述
及
应该是:
$scope.$apply(fn);
var phase = $scope.$root.$$phase; // or $scope.$$phase;
以及:
应该是:
$scope.$apply(fn);
var phase = $scope.$root.$$phase; // or $scope.$$phase;
然而,我会重写您的代码,使用$timeout,因为angular的摘要周期不是一成不变的
$timeout(function() {
// code to by "apply'ed" to be digested next cycle
});
我使用
angular.extend
解决了这个问题,如下所示:
"use strict";
// Safely apply changes to the $scope
// Call this instead of $scope.$apply();
var ExtendScope = function ($scope) {
angular.extend($scope, {
safeApply: function (fn) {
var phase = this.$root.$$phase;
if (phase == '$apply' || phase == '$digest') {
if (fn && (typeof (fn) === 'function')) {
fn();
}
} else {
this.$apply(fn);
}
},
alertOn: function (eventName, message) {
this.$on(eventName, function () { alert(message); });
}
});
};
所以现在在我的控制器中,我可以简单地添加,例如
$scope.alertOn('save_succeeded', "Saved.");
这就行了
谢谢你的回答 是您的朋友:)您将参数指定为
eventName
,但将其用作eventName
(小写“n”)!!!你确定没有人叫它吗?控制台上有错误吗?除了Nikos提到的eventName
/eventName
,难道不是正确的方法$on
,而不仅仅是on
?因为代码是编写的,并且预期会被调用,这个就是$scope
。因此,这在这个问题上不会有任何区别,尽管它可能是一个好主意,只是为了防止不合理的使用。
$scope.alertOn('save_succeeded', "Saved.");