Javascript 什么';someChildScope.$apply()和$rootScope.$apply()之间的区别是什么?
再详细一点: 假设我有服务:Javascript 什么';someChildScope.$apply()和$rootScope.$apply()之间的区别是什么?,javascript,angularjs,Javascript,Angularjs,再详细一点: 假设我有服务: app.service('MyService', function(SomeWebSocketService) { function MyService() { this.object = {}; } MyService.prototype.subscribe = function() { var self = this; SomeWebSocketService.subscribe('someTopic', function(d
app.service('MyService', function(SomeWebSocketService) {
function MyService() {
this.object = {};
}
MyService.prototype.subscribe = function() {
var self = this;
SomeWebSocketService.subscribe('someTopic', function(data) {
angular.extend(self.object, data);
}
}
return MyService;
}
// usage
app.controller('MyController', function($scope, MyService) {
var model = new MyService();
$scope.object = model.object;
});
当我从WebSocket服务获取消息时,我希望触发$digest
循环。我的第一个倾向是这样做:
app.service('MyService', function(SomeWebSocketService) {
function MyService(scope) {
// scope from wherever this service was called
this.scope = scope;
this.object = {};
}
MyService.prototype.subscribe = function() {
var self = this;
SomeWebSocketService.subscribe('someTopic', function(data) {
angular.extend(self.object, data);
self.scope.$apply();
}
}
return MyService;
}
// usage
app.controller('MyController', function($scope, MyService) {
var model = new MyService($scope);
$scope.object = model.object;
});
但我不喜欢在任意范围内传递。所以我想这样做:
app.service('MyService', function($rootScope, SomeWebSocketService) {
function MyService() {
this.object = {};
}
MyService.prototype.subscribe = function() {
var self = this;
SomeWebSocketService.subscribe('someTopic', function(data) {
angular.extend(self.object, data);
$rootScope.$apply();
}
}
return MyService;
}
// usage
app.controller('MyController', function($scope, MyService) {
var model = new MyService();
$scope.object = model.object;
});
我会因为这样做而受到表演的打击吗?或者在一个
$scope
上调用$apply
与在任何一个$scope
上调用$apply
相同吗?这样说吧……当前门有芯片时,你是想粉刷整栋房子,还是只是粉刷门?在jsPerf.com中运行一个perf测试,可以找出哪一个更好您考虑过使用承诺而不是直接调用$apply()吗?如果您查看console.log,您可能会因为直接调用apply而出现许多异常。@Brian Promissions在我的实际用例中不起作用,它涉及WebSocket。因此,update函数实际上更像一个subscribe函数,在subscribe被调用后,对象会定期更新。谢谢@Tim。我还发现了一个问题,这个问题让我明白了一些。我想我会投票把它作为一个复制品关闭。