Angularjs bs select中的ng选项筛选器无法访问服务范围变量
更新:Plnkr 我正在用下面的代码创建一个angularstrap下拉列表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
{{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);
});
});