2016-03-01 49 views
1

我有书籍服务来搜索书籍。 大部分时间服务,例如只有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

如果多个控制器同时使用该服务怎么办? –

+0

我会将每个控制器数据添加到此数组中:'dataBindedToController'。然后一个控制器销毁,我将拼接数组,删除不再nessecerey的数据 – Aminadav

回答

1

您可以像这样传递范围

controller($scope,bookService){ 
    $scope.data=bookService.getList($scope, query,20) 
} 

然后将$scope保存在您的服务中,然后在其中附加事件侦听器。我不知道但如果它传递$范围,服务一个很好的做法,我认为这不是


,你可以听$destroy事件

$scope.$on('$destroy', function() { 

    bookService.destroy($scope.$id); 

}) 

你希望索引dataBindedToController$scope.$id所以你会知道要删除什么

+0

谢谢。但我更喜欢不把代码添加到控制器,而只是添加到服务中。有一种方法可以让服务人员知道哪个控制器称他? – Aminadav

+0

@Amina我编辑了我的答案 –

相关问题