我正在尝试从我的控制器中查看我的服务中的值。但手表并没有被解雇。
这是我的代码
Service.js
(function() {
function myService($rootScope, anotherService) {
console.log(rootScope)
this.myList = [];
this.getListOfValues = function(question,questionType) {
anotherService.getList(function(data, status) {
myService.myList = data;
});
}
}
app.addService(app.config.modules.MY_MODULE, "myService", myService);
}());
Controller.js
(function() {
function myCtrl($scope, $rootScope) {
console.log(rootScope)
this.askQuestion = function() {
myService.getListOfValues();
}
$scope.myService = myService;
$scope.myList = myService.myList;
$scope.$watch('myService.myList', function (newVal, oldVal) {
if(newVal && newVal.length > 0) {
$scope.listToLoad = newVal;
}
});
app.addController(app.config.modules.MY_MODULE, "myCtrl", myCtrl);
}());
home.html
<html ng-app = "myApp">
<head>
<script>
app.inject(app.config.modules.MY_MODULE, "myService", function(instance) {
myService = instance;
console.log("myService dependency injected successfully.");
});
</script>
</head>
<body ng-controller="myCtrl">
<div>
<img id="getList" onclick="askQuestion()">
</div>
</body>
</html>
如果myList变量在我的服务中发生变化,我希望将更改通知给控制器,控制器应该采取一些措施。但手表没有射击。我尝试使用$ rootScope.emit()在myList的更改中触发事件,然后使用$ rootScope.on()在我的控制器中捕获该事件,但即使这样也不起作用。
当我在服务中记录rootScope的值时,我看到rootScope的id为1.请参阅屏幕截图
当我在控制器中记录rootScope的值时,我看到rootScope的id为2.请参阅屏幕截图。
如果我检查最高级别的范围,即html ng-app =“myApp”级别,我看到范围的id为2,与控制器相同。
我不明白为什么我的控制器和服务有2个不同的rootScope id。这是我的事件或手表没被解雇的原因吗?
有人可以对此有所了解吗?感谢
答案 0 :(得分:1)
Angular服务是单个注入器(app实例)中的单例。 app.inject
创建一个新的注入器,它有自己的一组服务单例。