我正在搞乱一个家庭项目,我正在使用带有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没有更新,只显示默认值。我不知道我做错了什么,并希望对这个问题有任何帮助!
答案 0 :(得分:0)
一个选项,也许是最简单的选择,是将$rootScope
注入需要共享数据对象的控制器中:
application.controller("testingCtrl", function ($scope, $rootScope, $cordovaCamera) {
$rootScope.dataObject = {
Nor: 33,
Sus: 33,
Mal: 33
};
}
然后只需将$rootScope.dataObject
注入任何应该有权访问的其他控制器即可访问$rootScope
。
有关详细信息,请参阅here。
答案 1 :(得分:0)
我建议不要$rootScope
或value
。我认为这些都是反模式,$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],
}
);
请注意,当data
(dataObject.Nor
)的第一个索引无法通过另一个updateConfig
调用更新时。原因是您传递的是一个丢失引用的简单数据类型。