Javascript angularjs搜索筛选器问题
下面是我的plnkr 我在搜索页面上有问题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':
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: '' };