Angularjs bs select中的ng选项筛选器无法访问服务范围变量

Angularjs bs select中的ng选项筛选器无法访问服务范围变量,angularjs,angularjs-service,ng-options,angular-strap,angular-filters,Angularjs,Angularjs Service,Ng Options,Angular Strap,Angular Filters,更新:Plnkr 我正在用下面的代码创建一个angularstrap下拉列表 {{userService.current.id}} <!-- Outputs correct id (1) --> <button ng-if="userService.current.id || !loginService.isLoggedIn" type="button" class="btn btn-default" ng-model="profileService.current" da

更新:Plnkr

我正在用下面的代码创建一个angularstrap下拉列表

{{userService.current.id}} <!-- Outputs correct id (1) -->
<button 
ng-if="userService.current.id || !loginService.isLoggedIn" type="button" class="btn btn-default" 
ng-model="profileService.current" data-placeholder="Profiles" 
ng-options="profile.title for profile in profileService.profiles | 
filter:{userId: userService.current.id}" bs-select>
   Action <span class="caret"></span>
</button>
它按预期工作。因此,我假设我的情况范围有问题,但我开始觉得有点迷失在潜在的错误中,因为我仍然能够在示例的第一行打印正确的id


范围有问题吗?还是我的过滤器有什么地方做错了?

经过漫长的时间,终于解决了。我这样做的方式是使用$filter从控制器进行简单的过滤。如果还有其他更好/更合适的解决方案,我想听听。当filter指令已经存在时,将过滤器移动到控制器中感觉有点错误

HTML:

控制器:

.controller('HeaderCtrl', function($scope, $filter, userService, profileService) {
$scope.$watch('userService.current', function(newVal, oldVal) {
    $scope.filteredProfiles = $filter('filterProfiles')($scope.userService.current.id, $scope.profileService.profiles);
  });
});

更新了一个plunker。似乎常规的select可以正常工作,但不是angular strap select指令。有什么建议吗?你找到解决这个问题的更好办法了吗?没有。更好的解决方案是搁置,直到这一切都结束。
    <button type="button" class="btn btn-default" 
ng-model="profileService.current" data-placeholder="Profiles" 
ng-options="profile.title for profile in filteredProfiles" bs-select="">
                Action         <span class="caret"></span>
          </button>
.filter('filterProfiles', function() {
  return function(id, profiles) {
  var filteredProfiles = [];
    angular.forEach(profiles, function(value, key) {
      if (value.userId == id) {
        filteredProfiles.push(value);
      }
    });
    return filteredProfiles;
  }
});
.controller('HeaderCtrl', function($scope, $filter, userService, profileService) {
$scope.$watch('userService.current', function(newVal, oldVal) {
    $scope.filteredProfiles = $filter('filterProfiles')($scope.userService.current.id, $scope.profileService.profiles);
  });
});