Javascript 控制器$scope属性未更新(套接字连接)
我想让我的角度控制器通过与WebSocket连接的工厂进行更新 工厂:Javascript 控制器$scope属性未更新(套接字连接),javascript,angularjs,sockets,angularjs-service,angularjs-factory,Javascript,Angularjs,Sockets,Angularjs Service,Angularjs Factory,我想让我的角度控制器通过与WebSocket连接的工厂进行更新 工厂: function($rootScope, mySocketFactory) { mySocketFactory.setHandler('message', function(event) { $rootScope.$apply(function() { Factory.msg = event.data; }); console.log('fact
function($rootScope, mySocketFactory) {
mySocketFactory.setHandler('message', function(event) {
$rootScope.$apply(function() {
Factory.msg = event.data;
});
console.log('factory', Factory.msg);
});
var Factory = {};
Factory.msg = 'init';
return Factory;
}
function ($scope, myFactory) {
console.log(myFactory.msg);
$scope.msg = myFactory.msg;
}
<div data-ng-controller="StatusBarController" class="col-lg-12">
{{msg}}
</div>
控制器:
function($rootScope, mySocketFactory) {
mySocketFactory.setHandler('message', function(event) {
$rootScope.$apply(function() {
Factory.msg = event.data;
});
console.log('factory', Factory.msg);
});
var Factory = {};
Factory.msg = 'init';
return Factory;
}
function ($scope, myFactory) {
console.log(myFactory.msg);
$scope.msg = myFactory.msg;
}
<div data-ng-controller="StatusBarController" class="col-lg-12">
{{msg}}
</div>
部分:
function($rootScope, mySocketFactory) {
mySocketFactory.setHandler('message', function(event) {
$rootScope.$apply(function() {
Factory.msg = event.data;
});
console.log('factory', Factory.msg);
});
var Factory = {};
Factory.msg = 'init';
return Factory;
}
function ($scope, myFactory) {
console.log(myFactory.msg);
$scope.msg = myFactory.msg;
}
<div data-ng-controller="StatusBarController" class="col-lg-12">
{{msg}}
</div>
{{msg}}
如果工厂通过消息事件控制台.log('factory',factory.msg)获取数据
返回更新后的值,但控制器不应用更改并坚持使用init
数据。我做错了什么
注意:我用数组而不是字符串尝试了相同的示例,结果成功了!?首先,我认为这可能是因为字符串不是通过引用传递的,但因为我们在JS世界中,它们是通过引用传递的 不绑定属性,您可以创建一个getter
函数表单工厂,它将返回msg
属性值,html上的{{msg()}
将在每个摘要周期中进行评估,因为您在接收消息时都从服务运行它
工厂
var Factory = {};
Factory.getMsg = function(){
return Factory.msg;
};
return Factory;
function($rootScope, mySocketFactory) {
mySocketFactory.setHandler('message', function(event) {
$rootScope.$apply(function() {
Factory.data.msg = event.data;
});
console.log('factory', Factory.msg);
});
var Factory = {};
Factory.data = { msg : 'init'};
return Factory;
}
控制器
function ($scope, myFactory) {
$scope.msg = myFactory.getMsg;
}
function ($scope, myFactory) {
$scope.info = myFactory.data;
}
HTML
<div data-ng-controller="StatusBarController" class="col-lg-12">
{{msg()}}
</div>
<div data-ng-controller="StatusBarController" class="col-lg-12">
{{info.msg}}
</div>
控制器
function ($scope, myFactory) {
$scope.msg = myFactory.getMsg;
}
function ($scope, myFactory) {
$scope.info = myFactory.data;
}
HTML
<div data-ng-controller="StatusBarController" class="col-lg-12">
{{msg()}}
</div>
<div data-ng-controller="StatusBarController" class="col-lg-12">
{{info.msg}}
</div>
{{info.msg}
这很好用。那么诀窍是在html部分中使用函数?这是做这类事情的“标准方式”吗?我对角度世界很陌生。但更重要的是,为什么它在没有getter的情况下与数组一起工作?@messy查看我的编辑。更新的答案是正确的&拥有它的良好实践。这很有效,但仍然有一个问题对我来说是开放的。为什么它可以处理对象/数组而不能处理字符串?原始数据类型不能处理这些引用..就像对象/数组那样