Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 控制器$scope属性未更新(套接字连接)_Javascript_Angularjs_Sockets_Angularjs Service_Angularjs Factory - Fatal编程技术网

Javascript 控制器$scope属性未更新(套接字连接)

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

我想让我的角度控制器通过与WebSocket连接的工厂进行更新

工厂:

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查看我的编辑。更新的答案是正确的&拥有它的良好实践。这很有效,但仍然有一个问题对我来说是开放的。为什么它可以处理对象/数组而不能处理字符串?原始数据类型不能处理这些引用..就像对象/数组那样