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

Why does Angular databinding against factories only work with functions?

本文关键字:数据绑定 适用于 函数 Angular 工厂 为什么      更新时间:2023-09-26

我有以下代码:

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>

问题是,当我运行change和revert方法时,只有"message3"属性会更改,有人能解释为什么只有那个更改吗?我读到一些关于angular只能对基元进行数据绑定的文章,这是怎么回事?还有没有更好的方法可以在不绑定函数的情况下将视图值数据绑定到工厂?

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