为什么只能更新工厂对象,而不是AngularJS中的变量?

时间:2014-11-06 19:15:29

标签: javascript angularjs

我正在尝试学习如何在Angular中更好地编码,所以如果还有更好的方法可以让我知道。

基本上,我有一个“切换”状态,它在我的应用程序周围的很多地方使用。它存储在Cookie中(我有一个服务),并且还为用户实时更新。

我的工厂ToggleFactory

var toggle = Cookie.check('toggle') ? Cookie.get('toggle') : false;

return {
    state: toggle,
    toggle: function() {
        if(!this.state) {
            Cookie.set('toggle', true);
            this.state = true;
            return true;
        }
        else {
            Cookie.set('toggle', false);
            this.state = false;
            return false;
        }
    }
};

在我的控制器中:

$scope.toggleState = ToggleFactory.state;

$scope.onToggle = function() {
    $scope.toggleState = ToggleFactory.toggle();
};

这是正常的,但是我知道有更好的方法可以做到这一点,而不返回任何东西......但是,如果我更新绑定到state的对象,而不是更新,我只能使它工作变量:

var obj = {
    toggle: Cookie.check('toggle') ? Cookie.get('toggle') : false;
}

return {
    state: obj,
    toggle: function() {
        if(!this.state) {
            Cookie.set(cookieKey, true);
            obj.toggle = true;
        }
        else {
            Cookie.set(cookieKey, false);
            obj.toggle = false;
        }
    }
};

控制器:

$scope.rotwState = ToggleFactory.obj.toggle;

$scope.onToggle = function() {
   ToggleFactory.toggle();
};

现在这个工作,因为范围绑定到该对象,我可以更新我的工厂中的对象,这反映在范围内....但为什么我不能用基本变量做这个?

希望有意义!

0 个答案:

没有答案