2016-03-01 48 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我編輯了我的答案 –

相關問題