为什么针对工厂的Angular数据绑定仅适用于函数?

时间:2015-03-26 21:01:41

标签: javascript angularjs data-binding angularjs-scope

我有以下代码:

angular.module('app')
    .controller('controller', controller)
    .factory('storageFactory', storageFactory);

function storageFactory() {
    var message;
    _message = "Message # 1";

    return {
        message: {
            get: function() {
                return _message;
            },
            set: function(value) {
                _message = value;
            },
            value: _message
        }
    }
}

controller.$inject = ['storageFactory'];
function controller(storage) {
    var viewModel = this;
    viewModel.message1 = storage.message.value;
    viewModel.message2 = storage.message.get();
    viewModel.message3 = storage.message.get;
    viewModel.change = change;
    viewModel.revert = revert;

    function change() {
        storage.message.set("Message # 2");
    }
    function revert() {
        storage.message.set("Message # 1");
    }
}

我有以下html:

<label>{{controller.message1}}</label>
<label>{{controller.message2}}</label>
<label>{{controller.message3()}}</label>

问题是,当我运行更改并恢复方法时,只有&#34; message3&#34;财产变化,有人可以解释为什么只有那个变化?我读到一些关于角度的东西只能对原始数据进行数据处理,这是多么真实?是否有更好的方法可以在不绑定函数的情况下将视图值数据绑定到工厂?

1 个答案:

答案 0 :(得分:1)

您正在设置controller.message1和controller.message2中的值的副本。在controller.message3()中,您实际上是在消息上执行get访问器并获取最新值的副本。