javascript - 为什么针对工厂的 Angular 数据绑定(bind)只能与函数一起使用?

标签 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>

问题是,当我运行更改和恢复方法时,只有“message3”属性发生变化,有人可以解释为什么只有那个属性发生变化吗?我读到一些关于 Angular 只能针对基元进行数据绑定(bind)的内容,这有多真实?有没有更好的方法将 View 值数据绑定(bind)到工厂而不绑定(bind)函数?

最佳答案

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

关于javascript - 为什么针对工厂的 Angular 数据绑定(bind)只能与函数一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29288786/

相关文章:

javascript - 如何在 react 中将商品添加到购物车页面

javascript - promise 链接返回未定义

javascript - angularjs ngRepeat 有时我无法向下滚动

c# - 仅出于数据绑定(bind)目的而使用中间类型是否是正常做法? (WPF)

asp.net - Repeater中DropDownList的SelectedValue

c# - 在不使用按钮的情况下单击 gridview 行时不显示模式弹出窗口

javascript - ReactJS - 为什么我的输入栏的样式没有根据 setState 改变?

javascript - smoothstate.js vs pjax 有区别吗

javascript - Angular UI Typeahead - 手动清除/隐藏下拉列表

javascript - AngularJS:循环 POST 请求并将每个索引传递到相关响应中