我在AppCtrl.js中有这个:
$scope.facebookUserDone = $q.defer();
我希望从视图的控制器访问此变量:
WeightLevel.js:
$q.when($scope.facebookUserDone.promise).then(function () {
$scope.userFaceUrl = userr.pictureUrl;
});
这可能或者我应该将变量放在$ rootScope上吗?
由于
答案 0 :(得分:2)
创建一个工厂来存储变量,然后将此工厂注入两个控制器。
厂
angular
.module('app')
.factory('dataservice', dataservice);
function dataservice($http, logger) {
var dataStore = {};
return {
setVariable: setVariable,
getVariable: getVariable
};
function setVariable(name,value) {
dataStore[name] = value;
}
function getVariable(name){
return dataStore[name]
}
}
控制器
angular.module('app').controller('MyCtrl', myCtrl);
myCtrl.$inject = ['$scope','dataservice'];
function myCtrl($scope,dataservice){
dataservice.setVariable('foo','bar');
$scope.foo = dataservice.getVariable('foo');
}
使用dataservice,您现在可以设置setVariable并将其存储到工厂,并使用dataservice.getVariable方法从任何控制器访问它。
答案 1 :(得分:0)
在两个控制器中创建服务和注入。
答案 2 :(得分:0)
提供一些其他解决方案。您可以使用值或事件(取决于您的设置,因为您可能会遇到一些并发问题)。
以下示例描述了您的案例中角度值的用法,并假设您的模块名为“app”。
angular
.module('app')
.value('states', {
facebookUser: null
});
然后在你的AppCtrl中,你可以注入“states”值,将其设置为延迟的承诺:
angular
.module('app')
.controller('AppCtrl', ($q, states) => {
states.facebookUser = $q.defer();
});
这样您就可以注入并访问其他控制器中的值。
如果您只需要某种全局状态,使用值可能会很棒。如果您需要更强大的东西,使用服务或工厂可能更合适。