我发现了问题的来源,我遗漏了重要部分。
我在第一个控制器INSIDE中设置属性
$rootScope.$on('anEvent', function (event, data) {
InjectedService.setToken(data.value);
})
但是我无法从外部那个回调范围中获取它。被监听的事件取决于$ http请求,所以我猜这是问题所在。这有什么变通方法吗?
控制器的顺序是另一种方式,因此secondController中的代码实际上是在我的实际应用程序中首先被调用。我已相应重新排序了
我正在尝试获取特定于服务的属性但是当我尝试获取服务属性时,我得到了未定义(使用getter函数或不使用)。但是当我尝试获取全部服务时,我会获得具有正确属性和价值的所有内容。
main.js
angular.module('myApp', ['myModule', 'myServices'])
.controller('firstController', ['InjectedService', function(InjectedService) {
InjectedService.setProperty('Hello World')
}])
othermodule.js:
angular.module('myModule', [])
.controller('secondController', ['InjectedService',
function (InjectedService) {
console.log(InjectedService); // Full object with property == 'hello world'
console.log(InjectedService.property); // I get undefined
console.log(InjectedService.getProperty()); // I get undefined
// interesting to note:
InjectedService.setToken('A different string');
console.log(InjectedService.property); // I get 'A different string'
console.log(InjectedService); // Full object with property == 'Hello World' which was set in second controller
}])
services.js:
angular.module('myServices', function
.service('InjectedService', function(){
var Service = this;
Service.setProperty = function (value) {
Service.property = value;
}
Service.getProperty = function () {
return Service.property;
}
Service.unsetProperty = function () {
Service.property = null;
}
return Service;
})
在我看来,范围问题,但变量不是原始类型。有什么建议吗?