【发布时间】:2015-09-17 03:02:52
【问题描述】:
我正在尝试使用两种过滤方式(通过单击字母或通过在输入字段中输入)。
<body ng-controller="MainController">
<ul search-list=".letter" model="search">
<li class="letter" ng-repeat="letter in alphabet.letter">{{ letter }}</li>
</ul>
<div class="container" ng-controller="CountriesController">
<input id="q" type="text" ng-model="search " />
<ul>
<li ng-repeat="country in countries.country | filter:search:startsWith">{{ country }}</li>
</ul>
</div>
</body>
和js:
var app = angular.module('demo', []);
var controllers = {};
var alphabet = "abcdefghijklmnopqrstuvwxyz".split("");
app.directive('searchList', function() {
return {
scope: {
searchModel: '=model'
},
link: function(scope, element, attrs) {
element.on('click', attrs.searchList, function() {
scope.searchModel = $(this).text();
scope.$apply();
});
}
};
});
controllers.MainController = function($scope) {
$scope.setTerm = function(letter) {
$scope.search = letter;
};
$scope.alphabet = {
letter: alphabet
}
};
controllers.CountriesController = function($scope){
$scope.countries = {
country:['Ukraine','Urugvai','Russia','Romania','Rome','Argentina','Britain']
}
$scope.startsWith = function (actual, expected) {
var lowerStr = (actual + "").toLowerCase();
return lowerStr.indexOf(expected.toLowerCase()) === 0;
}
};
app.controller(controllers);
乍一看,一切正常,但只有第一眼才如此......
起初我点击任何字母时 - 过滤器效果很好。 然后我在输入字段中输入 - 过滤器效果很好。 但是在我输入输入字段或通过“退格”按钮从那里删除文本后 - 通过单击字母进行过滤停止工作......
为什么会这样,我该如何解决这个问题? 这是我的DEMO
提前谢谢!
【问题讨论】:
-
问题是范围继承。在您实际输入输入字段的那一刻,
CountriesController的范围将具有它自己的search值,并且不再从MainController继承它。如果您关注dot-rule,则可以解决此问题。
标签: javascript jquery angularjs filter filtering