2015-05-29 74 views
0

新點擊[過濾器]不清除以前的輸出,但添加到存在。 例如,如果通過「禁止」進行過濾,我看到禁止的用戶列表,下一個按「已註冊」過濾器不會刪除「已禁用」,而是將「已註冊」添加到表格末尾。 在控制器$ scope.site_users中被覆蓋,但在某處仍然保存先前的過濾器輸出。 這是爲什麼發生?可能是包裝上的東西?輸出連接

安裝包:

urigo:angular - Angular 
angularui:angular-ui-router 
accounts-password 
accounts-ui 
twbs:bootstrap 

刪除的包:

insecure 
autopublish 

或者在代碼

控制器:

angular.module("sis_admin_am").controller("UsersListCtrl", ['$scope', '$meteor', 
    function($scope, $meteor){ 

     $scope.filter = function(){ 
      $scope.site_users = ''; 
      $scope.site_users = $meteor.collection(Users).subscribe('site_users_filtered', {status: $scope.userStatus}); 
     }; 
    } 
]); 

查看:

<form ng-submit="filter()"> 
    <button>Filter</button> 
    <select ng-model="userStatus" > 
     <option ng-selected="selected">banned</option> 
     <option>registered</option> 
     <option>active</option> 
    </select> 
</form> 
<p></p> 
<table class="table"> 
    <tr class="panel panel-default"> 
     <th>Name</th> 
     <th>Email</th> 
    </tr> 

    <tr ng-repeat="user in site_users"> 
     <td>{{ user.username }}</td> 
     <td>{{ user.email }}</td> 
    </tr> 
</table> 

服務器部分:

Meteor.publish('site_users_filtered', function(options) { 
    console.log('options:', options); 
    return Users.find(options); 
}); 

回答

0

我覺得你的問題是,ngSelected不necessarly選擇只有一個選擇你的下拉列表中。 ,這是因爲,tchnically您應該取消選擇您不需要的userStatus手動,因爲他們在官方文檔做的事:

https://docs.angularjs.org/api/ng/directive/ngSelected 

您可以嘗試一起發送您的NG-模型(userState)的過濾器()函數並且實際上直接使用該值進行過濾,而無需檢查範圍。

+0

關於ngSelected - 刪除它所有,但問題依然存在。嘗試輸入類型的文字,但仍然是同樣的問題。對不起,但沒有理解ng模型,你可以添加一個例子嗎? – Pumych

1

這是因爲如何訂閱流星的作品。 如果您添加或更改訂閱而不關閉之前的訂閱,它只會將它們加在一起(這很好,但您必須注意它)。 如果你想訂閱(出於安全原因)來過濾你應該改變這樣的代碼:

angular.module("sis_admin_am").controller("UsersListCtrl", ['$scope', '$meteor', 
    function($scope, $meteor){ 

     var savedSubscriptionHandle = null; 
     $scope.filter = function(){ 
      savedSubscriptionHandle.stop(); 
      $scope.site_users = ''; 
      $scope.site_users = $meteor.collection(Users); 
      $scope.$meteorSubscribe('site_users_filtered', {status: $scope.userStatus}).then(function(handle){ 
       savedSubscriptionHandle = handle; 
      }); 
     }; 
    } 
]); 

但是,如果你不介意保持所有數據在本地緩存中可能更容易使用角度的過濾器或流星的光標語法來過濾顯示。

更詳細的解釋在這裏: http://angular-meteor.com/tutorial/step_12