我有图书服务来搜索图书。 大部分时间服务,例如只提供20本书。
我希望服务器能够在控制器收到数据后更改屏幕上的书籍属性。
例如: 我有一个控制器,显示20本书的清单(来自搜索查询和限制属性)。
我希望服务器能够在控制器获取数据(实时更改)后更改控制器获得的书籍
controller($scope,bookService){
$scope.data=bookService.getList(query,20)
}
service(function(){
var dataBindedToController=[]
return{
getList:function(query,limit){
dataBindedToController.push([{name:'book1'},{name:'book2'}])
return dataBindedToController[dataBindedToController.length-1]
}
}
})
在上面的示例中,每次控制器询问书籍列表时,我都会通过引用将返回的数据添加到服务中。之后,例如,如果我在服务中执行:dataBindedToController[0][2].name='Moshe'
,它将自动更新控制器。控制器$scope.data
=== dataBindedToController[0]
现在的问题是:当控制器被破坏时,服务现在如何处理,并从其数组中删除bindedData?
我想尽快保持控制器(尽可能简单)。
另一个例子: 一个工作的JSFiddle,在控制器获取数据后使用绑定技术更新服务中的计数器: https://jsfiddle.net/tLLtn45j/
var app=angular.module('app',[])
.controller('a',function($scope,service){
$scope.data=service
})
.service('service',function($interval){
var data={counter:3}
$interval(function(){data.counter++},500)
return data
})
问题是:当控制器被销毁时,服务现在如何停止更新计数器
答案 0 :(得分:1)
您可以像这样传递范围
controller($scope,bookService){
$scope.data=bookService.getList($scope, query,20)
}
然后将$scope
保存在您的服务中,然后在那里附加事件监听器。我不确定将$ scope传递给服务是否是一个好习惯,我认为它不是
您可以收听$destroy
事件
$scope.$on('$destroy', function() {
bookService.destroy($scope.$id);
})
您可能希望使用dataBindedToController
为$scope.$id
编制索引,以便了解要移除的内容