Javascript 双向绑定不';我不在ES6工作

Javascript 双向绑定不';我不在ES6工作,javascript,angularjs,Javascript,Angularjs,考虑一下这个代码 export class TestController { constructor() { this.socket = io(); this.movies = {}; this.socket.emit('getAllMovies', ''); this.socket.on('allMovies', this.listMovies.bind(this)); } listMovies(data

考虑一下这个代码

export class TestController {
    constructor() {
        this.socket = io();
        this.movies = {};
        this.socket.emit('getAllMovies', '');
        this.socket.on('allMovies', this.listMovies.bind(this));
    }

    listMovies(data){
        this.movies = JSON.parse(data);
        console.log(this.movies);
    }
}
和视图(使用controllerAs语法)


{{ctrl.movies}

当我打开页面时,它显示{},然后是来自websocket收入(正确)的数据,与this.movies相匹配,没有任何变化。看来双向竞价被打破了。有人知道为什么吗?

问题不在于w/ES6,而在于角度变化检测机制不知道您的插座,并且它必须运行摘要循环

看看这个。这里的套接字io使用一个服务包装,该服务在每个套接字事件上手动调用$apply

app.factory('socket', function ($rootScope) {
  var socket = io.connect();
  return {
    on: function (eventName, callback) {
      socket.on(eventName, function () {  
        var args = arguments;
        //NB!
        $rootScope.$apply(function () {
          callback.apply(socket, args);
        });
      });
    }
  };
});

问题不是w/ES6,而是来自角度变化检测机制不知道您的套接字以及它必须运行摘要循环这一事实

看看这个。这里的套接字io使用一个服务包装,该服务在每个套接字事件上手动调用$apply

app.factory('socket', function ($rootScope) {
  var socket = io.connect();
  return {
    on: function (eventName, callback) {
      socket.on(eventName, function () {  
        var args = arguments;
        //NB!
        $rootScope.$apply(function () {
          callback.apply(socket, args);
        });
      });
    }
  };
});

您使用的是angular 2?我相信问题不在w/ES6,而是因为angular change detection mechanism不知道您的套接字,而且它必须运行摘要循环。@JohnnyJohn我使用的是angular1,忘了提一下看看这个教程,这里的套接字io附带了一个服务,可以在每个套接字事件上手动调用
$apply
。@YuryTarabanko请用这个链接发布您的答案,这样我就可以标记它了。它解决了我的问题您使用的是angular 2?我相信问题不是w/ES6,而是因为角度变化检测机制不知道您的套接字,而且它必须运行摘要循环。@Johnny John我使用的是angular1,忘了提一下看看这个教程,这里的套接字io附带了一个服务,可以在每个套接字事件上手动调用
$apply
。@YuryTarabanko请用这个链接发布您的答案,这样我就可以标记它了。它解决了我的问题