2015-11-10 50 views
1

我創建了一個過濾器,用於檢查用戶標識,然後過濾掉沒有該用戶標識的ng-repeat中的所有結果。使用控制器的自定義過濾器

如果我把我的過濾器,

UserService.getCurrentUser() 
    .then(function(user_id){ 
    $scope.user_id = user_id; 
}); 

在我的控制器,它工作正常,但我想保持我的控制器儘可能的乾淨,所以我想把它搬走。

我創建了一個名爲「userFilter.js」,這是代碼文件,

angular.module('addMovieseat', []) 

    .filter('user_filter', function() { 
    UserService.getCurrentUser() 
     .then(function(user_id){ 
     $scope.user_id = user_id; 
    }); 
    }); 

但是,當我注入過濾器進入我的控制器,我得到一個錯誤,

Error: [$injector:unpr] Unknown provider: user_filterProvider <- user_filter <- addMovieCtrl

這也是我的服務,我得到我目前的用戶ID,

(function(){ 
    "use strict"; 

    angular.module('addMovieseat') 

    .factory('UserService', function($http, $q){ 
    return{ 
     getCurrentUser: function(){ 
     var user_id = null, 

     deferred = $q.defer(); 
     // Get the current user id and use it to filter out all movies that do not correspond to that id in the main overview. 
     $http.get(('/users.json'),{ cache: true}). 
      success(function (data, status, headers, config) { 

      if (status == 200) { 
       deferred.resolve(data.id); 
      } else { 
       deferred.resolve(false); 
       console.error('Error happened while getting the user list.') 
      } 
     }); 

     return deferred.promise; 
     } 
    } 
    }); 
})(); 
+1

有在過濾器中不是'$ scope'。爲什麼你首先使用「過濾器」呢?顯示'getCurrentUser()'的代碼。另外一個過濾器需要返回一個函數,該函數依次返回該函數的結果。您的過濾器不會返回任何內容 – charlietfl

+0

我正在使用過濾器,因爲我需要過濾掉所有不符合當前用戶ID的結果。我無法在我的RoR後端執行此操作,因爲對於不同的功能,我需要顯示所有結果。這就是我在Angular中過濾的原因。我也添加了該服務。 –

+0

如果你想要的只是一個過濾列表,爲什麼不使用純$ filter或者array.filter –

回答

2

聽起來好像你可能更好地使用ng-if重複項目。像這樣

<li ng-repeat="movie in movies" ng-if="movie.user_id == user_id"></li> 

假設$scope.user_id在你的控制器是被檢查身份證,和你的電影的名單是一個數組。像這樣:

$scope.user_id = 'Tim'; 

$scope.movies = [ 
    {name: 'Movie Title 1', user_id: 'Tim'}, 
    {name: 'Movie Title 2', user_id: 'Jane'}, 
    {name: 'Movie Title 3', user_id: 'Bob'} 
]; 

這隻會渲染帶有user_id'Tim'的電影。

編輯:Documentation for ng-if

編輯2:基於由OP的評論,更新的代碼,以反映具體問題。

+0

我想我明白你想要做什麼。但我沒有得到它的工作。我會盡力解釋一點。我有一個電影列表,每部電影都有一個user_id分配給它。我試圖過濾掉所有不符合當前用戶ID的電影。目前我有一個名爲'$ scope.user_id'的作用域,其中包含當前用戶標識。所以我不明白'user.id'的用途。 –

+0

我更新了答案,反映了你的具體變量。如果您仍然遇到問題,則可能是您獲取當前user_id的方式。 – TVann

+0

優秀!謝謝你解釋。 –