Angular:更新列表;为什么需要这个$ broadcast?

指数

我正在使用一个服务,该服务包含一个列表和操作该列表的方法。服务在中初始化,app.run()并在多个控制器之间共享。

NavCtrl包含一种用于更新整个列表的方法,而FutureHomeCtrl仅保留对该列表的引用以与ngRepeat(和其他指令)一起使用。

由于实际列表包含在服务中,并通过在FutureHomeCtrl引用进行分配$scope,因此我认为Angular会自动检测到并消化列表的任何更改。但是,如果我使用手动重新设置对服务列表的引用,则只能刷新列表$broadcast

我替换整个列表还是其他问题?我应该提一下,我也曾尝试过$apply()没有运气-再说一次,我认为那不是必须的吗?

// Part of Service
MyHome.toggleAllLights = function (command) {
    var deffered = $q.defer();
    if (command && command === 'on') {
        // Works
        MyHome.Lights.turnOnAll().$promise.then(function (lights) {
            MyHome.lights = lights;
            $rootScope.$emit('MyHome.lightsUpdate');
            deffered.resolve();
        });
    } else {
        // Doesn't work
        MyHome.Lights.turnOffAll().$promise.then(function (lights) {
            MyHome.lights = lights;
            deffered.resolve();
        });
    }
    return deffered.promise;
};

.controller('NavCtrl', ['$scope', 'MyHome', function ($scope, MyHome) {
    $scope.toggleAllLights = function (command) {
        MyHome.toggleAllLights(command).then(function () {
            console.log(MyHome.lights);
        });
    };

}])

.controller('FutureHomeCtrl', ['$rootScope', '$scope', 'MyHome', function ($rootScope, $scope, MyHome) {
    $scope.lights = MyHome.lights;

    $rootScope.$on('MyHome.lightsUpdate', function () {
        $scope.lights = MyHome.lights;
    });

}]);
土清

我替换整个列表还是其他问题?

是的,当您执行以下代码时:

 $scope.lights = MyHome.lights;

参考被复制到$scope.lights两者都引用内存中的同一对象,但引用($scope.lightsMyHome.lights)存储在单独的内存块中。因此,当您MyHome.lights用另一个对象替换时,MyHome.lights引用一个新对象,但$scope.lights 仍引用原始内存块

您可以尝试:

$scope.MyHome = MyHome;

并修改您的模板绑定以添加MyHome前缀。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Angular $ broadcast无法正常工作。

来自分类Dev

angular.js $ scope。$ broadcast,$ scope。$ emit,$ rootScope。$ broadcast使用什么?

来自分类Dev

AngularJS $ Broadcast和$ on不更新$ scope

来自分类Dev

什么是“更便宜”的性能明智的$ broadcast或$ watch

来自分类Dev

什么是“更便宜”的性能明智的$ broadcast或$ watch

来自分类Dev

茉莉花,Angular的“ rootScope。$ broadcast”测试

来自分类Dev

为什么我的$ emit和$ broadcast示例不起作用?

来自分类Dev

cassandra.yaml中的broadcast_address和broadcast_rpc_address有什么区别?

来自分类Dev

如何在Angular中重现Angular JS .broadcast()/ .on()行为?

来自分类Dev

在$ broadcast之后的$ scope。$ on事件后,角度范围未更新

来自分类Dev

比使用 $broadcast 更新指令中的输入更好的方法?

来自分类Dev

socketio中的`socket.broadcast.to(param)`的作用是什么

来自分类Dev

既然$ broadcast胜过它,为什么现在要使用$ emit呢?

来自分类Dev

为什么需要这个克隆?

来自分类Dev

什么是在angularjs中触发事件使用$ broadcast / $ on的最佳实践/替代方法?

来自分类Dev

如何在angular.js中拦截所有$ rootScope。$ broadcast事件

来自分类Dev

在Angular中,如何确保在广播消息时加载$ broadcast侦听器

来自分类Dev

Angular $ rootScope。$ broadcast()事件在控制器中捕获两次

来自分类Dev

Angular Scope事件(通过$ broadcast发送)是否会进入事件队列?

来自分类Dev

hamcrest core,为什么需要这个?

来自分类Dev

为什么这个clojure宏需要''〜?

来自分类Dev

为什么这个变量需要是静态的?

来自分类Dev

为什么这个bash习语需要评估?

来自分类Dev

AngularJS pubsub vs $ broadcast

来自分类Dev

测试$ broadcast事件

来自分类Dev

Spark中的BroadCast变量

来自分类Dev

numpy.broadcast_to 对面

来自分类Dev

为什么这个 for 循环不考虑列表?

来自分类Dev

为什么这个GUI不更新?

Related 相关文章

  1. 1

    Angular $ broadcast无法正常工作。

  2. 2

    angular.js $ scope。$ broadcast,$ scope。$ emit,$ rootScope。$ broadcast使用什么?

  3. 3

    AngularJS $ Broadcast和$ on不更新$ scope

  4. 4

    什么是“更便宜”的性能明智的$ broadcast或$ watch

  5. 5

    什么是“更便宜”的性能明智的$ broadcast或$ watch

  6. 6

    茉莉花,Angular的“ rootScope。$ broadcast”测试

  7. 7

    为什么我的$ emit和$ broadcast示例不起作用?

  8. 8

    cassandra.yaml中的broadcast_address和broadcast_rpc_address有什么区别?

  9. 9

    如何在Angular中重现Angular JS .broadcast()/ .on()行为?

  10. 10

    在$ broadcast之后的$ scope。$ on事件后,角度范围未更新

  11. 11

    比使用 $broadcast 更新指令中的输入更好的方法?

  12. 12

    socketio中的`socket.broadcast.to(param)`的作用是什么

  13. 13

    既然$ broadcast胜过它,为什么现在要使用$ emit呢?

  14. 14

    为什么需要这个克隆?

  15. 15

    什么是在angularjs中触发事件使用$ broadcast / $ on的最佳实践/替代方法?

  16. 16

    如何在angular.js中拦截所有$ rootScope。$ broadcast事件

  17. 17

    在Angular中,如何确保在广播消息时加载$ broadcast侦听器

  18. 18

    Angular $ rootScope。$ broadcast()事件在控制器中捕获两次

  19. 19

    Angular Scope事件(通过$ broadcast发送)是否会进入事件队列?

  20. 20

    hamcrest core,为什么需要这个?

  21. 21

    为什么这个clojure宏需要''〜?

  22. 22

    为什么这个变量需要是静态的?

  23. 23

    为什么这个bash习语需要评估?

  24. 24

    AngularJS pubsub vs $ broadcast

  25. 25

    测试$ broadcast事件

  26. 26

    Spark中的BroadCast变量

  27. 27

    numpy.broadcast_to 对面

  28. 28

    为什么这个 for 循环不考虑列表?

  29. 29

    为什么这个GUI不更新?

热门标签

归档