Javascript angularjs搜索筛选器问题

Javascript angularjs搜索筛选器问题,javascript,angularjs,angularjs-directive,ionic-framework,Javascript,Angularjs,Angularjs Directive,Ionic Framework,下面是我的plnkr 我在搜索页面上有问题 angular.module('plexusSelect', []).directive('plexusSelect', ['$ionicModal', function($ionicModal) { // Runs during compile return { scope: { 'items': '=', 'text':

下面是我的plnkr

我在搜索页面上有问题

angular.module('plexusSelect', []).directive('plexusSelect', ['$ionicModal',
    function($ionicModal) {
        // Runs during compile
        return {
            scope: {
                'items': '=',
                'text': '@',
                'textIcon': '@',
                'headerText': '@',
                'textField': '@',
                'textField2': '@',
                'valueField': '@',
                'callback': '&'
            },
            require: 'ngModel',
            restrict: 'E',
            templateUrl: 'templates/plexusSelect.html',
            link: function($scope, iElm, iAttrs, ngModel) {
                if (!ngModel) return; // do nothing if no ng-model
                $scope.allowEmpty = iAttrs.allowEmpty === 'false' ? false : true;
                $scope.defaultText = $scope.text || '';
                $ionicModal.fromTemplateUrl('plexusSelectItems.html', {
                    'scope': $scope
                }).then(function(modal) {
                    $scope.modal = modal;
                    $scope.modal['backdropClickToClose'] = false;
                });
                $scope.showItems = function($event) {
                    $event.preventDefault();
                    $scope.modal.show();
                };
                $scope.hideItems = function() {
                    $scope.modal.hide();
                };
                /* Destroy modal */
                $scope.$on('$destroy', function() {
                    $scope.modal.remove();
                });
                $scope.viewModel = {};
                $scope.clearSearch = function() {
                    $scope.viewModel.search = '';
                };
                /* Get field name and evaluate */
                $scope.getItemName = function(field, item) {
                    return $scope.$eval(field, item);
                };
                $scope.validateSingle = function(item) {
                    $scope.text = $scope.$eval($scope.textField, item) + ($scope.textField2 !== undefined ? " (" + $scope.$eval($scope.textField2, item) + ")" : "");
                    $scope.value = $scope.$eval($scope.valueField, item);
                    $scope.hideItems();
                    if (typeof $scope.callback == 'function') {
                        $scope.callback($scope.value);
                    }
                    ngModel.$setViewValue($scope.value);
                };              
                $scope.$watch('text', function(value) {
                    if ($scope.defaultText === value) $scope.placeholder = 'placeholderGray';
                    else $scope.placeholder = 'placeholderBlack';
                });
            }
        };
    }
])
其中在我有参考离子束时,我的第二个指令搜索过滤器将停止工作,但同时,如果我参考它在两个指令中都工作搜索过滤器

在beta.14中使用angularjs 1.3,在beta.1中使用angularjs 1.2

所以有人告诉我这可能是迁移问题,但我检查了angularjs迁移文档,但没有找到任何东西。请有人帮我解决什么问题。

问题: 这是由于角度1.3.6中的断裂变化

摘录:

过滤器过滤器:由于a75537d4

表达式对象中的命名属性将仅与 同一级别上的属性。以前,命名字符串属性 将与相同级别或更深级别的属性匹配

为了匹配更深层次的嵌套属性,必须匹配 属性的深度级别或使用特殊的$key(仍然 匹配相同级别或更深级别的属性)

在首次使用指令时,
具有以下结构:

[
 { property: 'Value' }
]
第二次使用时:

[
 { Destination: { property: 'Value' } }
]
遗憾的是,您可能需要的bug修复程序直到:

过滤器:

使$match属性在更深层次上也匹配 (bd28c74c,#10401)

让表达式对象{$:'…'}也匹配 原始项目(fb2c5858,#10428)

解决方案: 将离子与AngularJS1.3.8或更高版本一起使用

将HTML更改为以下内容:

<label ng-repeat="item in items | filter: { $: viewModel.search }" ...

演示:

如果您看到plunker有两个指令,在第二个指令中,当您打开并尝试在搜索框中键入时,它将不会与第一个指令相同,但如果您引用1.0.0-beta.1。它会开始工作的,我会再给你解释。有两个指令。第二个指令将根据第一个指令的值从RESTAPI获取项。直到一切正常。但现在,当您打开第二个指令并在搜索框中键入(即过滤器)时,它将不会按预期进行过滤。请检查下面的链接,以便您理解@tasseKATT对不起,我错删除了您的评论。别担心,我是删除它的人,因为我发现了什么不起作用。我会尽快发布问题和解决方案。你真是个花花公子。我向你致敬。没有像你这样的人,像我这样的新手无法学习。我又发现了一些问题。若你们现在看到,我不能只过滤“科威特”这个词,但我可以过滤其他任何东西,为什么会这样?我的坏,并没有注意到。有一个名为
\uuu metadata
的属性,它包含一个url(以及一系列其他内容),该url包含
科威特
,因此所有填充对象都匹配该url。我会很快给你一个解决方案,我会等着的。提前谢谢你过滤这些名字就足够了吗?您正在显示的名称。
$scope.viewModel = { search: '' };