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

Why does Angular databinding against factories only work with functions?

我有以下代码:

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>

问题是,当我 运行 更改和还原方法时,只有 "message3" 属性 更改,有人可以解释为什么只有那个更改吗?我读到一些关于 angular 只能针对原语进行数据绑定的内容,这是真的吗?有没有更好的方法可以在不绑定函数的情况下将视图值数据绑定到工厂?

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