我正在使用AngularJS,我无法根据需要进行全局变量更改

时间:2016-09-11 15:14:14

标签: angularjs

我正在搞乱一个家庭项目,我正在使用带有Ionic框架的angularJS。我是angularJS的新手,我无法声明和更新全局变量以在控制器之间传递。我声明了以下全局变量:

application.value("dataObject",
{
    Nor: 33,
    Sus: 33,
    Mal: 33
});

然后我将dataObject.Nor设置为我的一个控制器中的其他值:

application.controller(
    "testingCtrl",
    function ($scope, $cordovaCamera, dataObject) {
        ...dataObject.Nor = 45;
        ...        
    }
);

然后我想访问这个更新的dataObject:

application.controller(
    "ResultsCtrl",
    function ($scope, dataObject) { 
        ... data: [dataObject.Nor,dataObject.Sus,dataObject.Mal],
        ...
    }
);

但是,当我这样做时,dataObject没有更新,只显示默认值。我不知道我做错了什么,并希望对这个问题有任何帮助!

2 个答案:

答案 0 :(得分:0)

一个选项,也许是最简单的选择,是将$rootScope注入需要共享数据对象的控制器中:

application.controller("testingCtrl", function ($scope, $rootScope, $cordovaCamera) {
    $rootScope.dataObject = {
        Nor: 33,
        Sus: 33,
        Mal: 33
    };
}

然后只需将$rootScope.dataObject注入任何应该有权访问的其他控制器即可访问$rootScope

有关详细信息,请参阅here

答案 1 :(得分:0)

我建议不要$rootScopevalue。我认为这些都是反模式,$rootScope将在Angular 2中消失。

尝试服务。

application.service('ConfigService', function() {
  var _config = {};

  this.updateConfig = function(c) {
    angular.copy(c, _config);
  }

  this.getConfig = function() {
    return _config;
  }
})

application.controller(
    "testingCtrl",
    function ($cordovaCamera, ConfigService) {
        ConfigService.updateConfig({Nor: 45});
    }
);

application.controller(
    "ResultsCtrl",
    function ($scope, ConfigService) { 
      var dataObject = ConfigService.getConfig();
      var data = [dataObject.Nor,dataObject.Sus,dataObject.Mal],
    }
);

请注意,当datadataObject.Nor)的第一个索引无法通过另一个updateConfig调用更新时。原因是您传递的是一个丢失引用的简单数据类型。