【问题标题】:update ng-repeat when data in service updates当服务中的数据更新时更新 ng-repeat
【发布时间】:2014-04-24 18:49:31
【问题描述】:

我有一个消息服务,可以存储任何需要像这样显示给用户的消息

app.controller('messageCtrl', function($scope, messages){
    //what to do
});

app.factory('messages', function(){
    return {
        messages: [
            {type:'info', text: 'info Message'},
            {type:'success', text: 'success Message'},
            {type:'warning', text: 'warning Message'},
            {type:'danger', text: 'danger Message'}
        ],

        addMessage: function(message){
            messages.push(message);
        },

        getMessages: function(){
            return messages;
        }
    };
);

我需要在我的控制器中执行什么操作,以便能够重复消息内容并在另一个控制器添加消息时更新它?

【问题讨论】:

    标签: angularjs angularjs-ng-repeat angularjs-service


    【解决方案1】:
    app.controller('messageCtrl', function($scope, messages){
        $scope.localMessages = messages.messages;
        //Just be sure to not replace the original array and this will work
        //if you need to repopulate the array or empty it use angular.copy()
    });
    
    app.factory('messages', function(){
        return {
            messages: [
                {type:'info', text: 'info Message'},
                {type:'success', text: 'success Message'},
                {type:'warning', text: 'warning Message'},
                {type:'danger', text: 'danger Message'}
            ],
    
        addMessage: function(message){
            messages.push(message);
        },
    
        getMessages: function(){
            return messages;
            }
        };
    );
    

    【讨论】:

    • 我觉得很愚蠢,忘记了数组是通过引用传递而不是复制的。所以只要我的原始数组没有被破坏或替换,任何更新都应该在副本上可见。
    • 很容易忘记,控制器范围内的手表应该看到更改,尽管正如您所说,只要相同的对象在服务中被持久化而不是被替换(这是很多人的另一个问题偶然发现)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 2015-03-02
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多