我有这个服务,以保持应用的状态最新。

'use strict';

angular.module('reportApp')
  .service('Status', function Status() {

    this.appStatus = {};

    // Status
    this.get = function(){

        this.appStatus = {

            menu:{
                right:{
                    activeOption: 'datax'
                },
                left:{

                }
            },
            section:{
                selectedSection: null
            }

        };

        return this.appStatus;

    };

    this.setActiveOptionRightMenu = function(menu){

        this.appStatus.menu.right.activeOption = menu.id;

    };

    this.setActiveSection = function(section){

        this.appStatus.section.selectedSection = section;

    };

    // ####################################


  });
.

在我的主控制器中我有这个:

$scope.openRightMenu = function(menu){

    Status.setActiveOptionRightMenu(menu);
    $scope.menu = Status.get().menu;

};

$scope.menu = Status.get().menu;
.

当控制器加载时的第一时刻它得到右默认值:

$scope.menu = Status.get().menu;
. 在第一时刻,我期待 activeoption:'datax',它是对的。但事件后点击查看调用 opennightmenu 视图不会更新新值。如果我在 setactiveoptionstionmenu 中放置了一个断点我可以看到设置的新值,但在看起来像视图忽略新值并继续使用旧值。

有帮助吗?

解决方案

在您的get函数中,您将覆盖this.appStatus

 // Status
this.get = function(){

    this.appStatus = {

        menu:{
            right:{
                activeOption: 'datax'
            },
            left:{

            }
        },
        section:{
            selectedSection: null
        }

    };

    return this.appStatus;

};
.

这将始终返回此对象的vistuptatus与vistoptatus定义为“datax”。您应该将其定义它在Get函数之外的默认值,或检查它是否为null。

// Status
this.appStatus = {

        menu:{
            right:{
                activeOption: 'datax'
            },
            left:{

            }
        },
        section:{
            selectedSection: null
        }

      };
this.get = function(){
      return this.appStatus;
}
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top