Javascript 角度ng重复过滤器不工作
我有一个从ajax调用中收到的FAQ数组,以及一个单独的FAQ类别数组,我正在尝试做一些事情,当您单击该FAQ的类别时,只有那些具有匹配categoryId的才会显示。我一直在尝试很多不同的事情,包括ng show,但现在我的努力集中在尝试让“过滤器:工作”。非常感谢您的帮助……以下是代码:Javascript 角度ng重复过滤器不工作,javascript,angularjs,filter,ng-repeat,Javascript,Angularjs,Filter,Ng Repeat,我有一个从ajax调用中收到的FAQ数组,以及一个单独的FAQ类别数组,我正在尝试做一些事情,当您单击该FAQ的类别时,只有那些具有匹配categoryId的才会显示。我一直在尝试很多不同的事情,包括ng show,但现在我的努力集中在尝试让“过滤器:工作”。非常感谢您的帮助……以下是代码: <div data-ng-controller="FAQController as dashboard" id="ctrler"> <div ng-repeat="ca
<div data-ng-controller="FAQController as dashboard" id="ctrler">
<div ng-repeat="cat in dashboard.categories" class="col-md-2">
<a data-ng-click="dashboard.filterForAnimation(cat)" href="#">
<div class="panel category-panel" data-fill-color="" data-context="">
<div class="panel-body background-6">
<span hidden class="cat-question-id" value="{{cat.id}}"></span>
<h4 class="question-category category-1">{{cat.name}}</h4>
</div>
</div>
</a>
</div>
<!-- visbile FAQs -------------------->
<div class="col-md-4 FAQ fades" data-ng-repeat="x in dashboard.visibleFaqs track by x.id | filter:dashboard.filter">
<div class="panel-body background-6 bg-grd-dark" data-fill-color="true">
<h4 class="headline question">{{x.question}} </h4>
<p class="answer">{{x.answer}}</p>
<a type="button" class="btn btn-success mb-1x mr-1x" href="/FAQs/{{x.id}}/edit">Edit</a>
<button type="button" data-ng-click="dashboard.delete(FAQ)" class="btn btn-danger mb-1x mr-1x" data="{{x.id}}">Delete</button>
</div><!-- /.panel-body -->
</div>
</div>
</div>
{{x.问题}
{{x.answer}
删除
这是控制器:
(function () {
"use strict";
angular.module(APPNAME)
.controller("FAQController", FAQController);
FAQController.$inject = ['$scope', '$baseController', '$faqService'];
function FAQController($scope, $baseController, $faqService) {
var vm = this;
vm.headingInfo = "FAQs"
vm.faqItems = null;
vm.categories = null;
vm.visibleFaqs = null;
vm.selectedCategoryId = null;
vm.$faqService = $faqService;
vm.$scope = $scope;
vm.receiveFAQItems = _receiveFAQItems;
vm.onError = _onError;
vm.delete = _delete;
vm.deleteSuccess = _deleteSuccess;
vm.getItemSuccess = _getItemSuccess;
vm.filterForAnimation = _filterForAnimation;
vm.filter = _filter;
$baseController.merge(vm, $baseController);
vm.notify = vm.$faqService.getNotifier($scope);
render();
function render() {
vm.$faqService.getCategories(vm.getItemSuccess, vm.onError);
vm.$faqService.ajaxGetAll(vm.receiveFAQItems, vm.onError);
}
function _getItemSuccess(data) {
vm.notify(function () {
vm.categories = data.items;
});
}
function _receiveFAQItems(data) {
vm.notify(function () {
console.log(data.items);
vm.faqItems = data.items;
})
}
function _onError(jqXhr, error) {
console.error("error");
}
function _delete(faqArray) {
var index = vm.faqItems.indexOf(faqArray);
vm.faqItems.splice(index, 1);
var id = faqArray.id;
vm.$faqService.ajaxDelete(id, vm.deleteSuccess, vm.onError)
}
function _deleteSuccess(faqArray) {
console.log("delete successful");
}
function _filterForAnimation(item) {
console.log("category clicked");
vm.selectedCategoryId = item.id;
for (var i = 0; i < vm.faqItems.length; i++) {
if (vm.faqItems[i].categoryId == vm.selectedCategoryId){
vm.filter(vm.faqItems[i].categoryId, vm.selectedCategoryId)
}
}
}
function _filter(faq, categoryId) {
if (faq == categoryId) {
return true;
}
else {
return false;
}
}
}
})()
(函数(){
“严格使用”;
angular.module(APPNAME)
.控制器(“FAQ控制器”,FAQ控制器);
FAQController.$inject=['$scope','$baseController','$faqService'];
功能FAQ控制器($scope、$baseController、$FAQ服务){
var vm=这个;
vm.headingInfo=“常见问题”
vm.faqItems=null;
vm.categories=null;
vm.visibleFaqs=null;
vm.selectedCategoryId=null;
vm.$faqService=$faqService;
vm.$scope=$scope;
vm.receiveFAQItems=\u receiveFAQItems;
vm.onError=\u onError;
vm.delete=\u delete;
vm.deletesucsuccess=\u deletesucsuccess;
vm.getItemSuccess=\u getItemSuccess;
vm.filterForAnimation=\u filterForAnimation;
vm.filter=\u filter;
$baseController.merge(vm,$baseController);
vm.notify=vm.$faqService.getnotifyer($scope);
render();
函数render(){
vm.faqService.getCategories(vm.getItemSuccess,vm.onError);
vm.faqService.ajaxGetAll(vm.receiveFAQItems,vm.onError);
}
函数_getItemSuccess(数据){
vm.notify(函数(){
vm.categories=data.items;
});
}
函数\u接收常见问题解答项(数据){
vm.notify(函数(){
console.log(数据项);
vm.faqItems=data.items;
})
}
函数_onError(jqXhr,错误){
控制台。错误(“错误”);
}
函数_delete(FAQ数组){
var index=vm.faqItems.indexOf(faqArray);
vm.faqItems.splice(索引,1);
var id=faqArray.id;
vm.faqService.ajaxDelete(id,vm.deletesucces,vm.onError)
}
函数deleteSuccess(faqArray){
console.log(“删除成功”);
}
函数过滤器用于初始化(项目){
console.log(“点击类别”);
vm.selectedCategoryId=item.id;
对于(var i=0;i
与前面的答案相同,但方法不同:
将\u过滤器
功能更改为:
function _filter(faq) {
return faq.categoryId == vm.selectedCategoryId;
}
您的vm.selectedCategoryId
由\u过滤器动态设置为动画,因此它将工作
您也可以像这样使用角度过滤器提供程序:
function _filter() {
return function(items, categoryId) {
return items.filter(function(item) {
return item.id == categoryId;
});
}
申报
angular.module(APP_NAME)
//...
.filter('categoryFilter', _filter);
在您的标记中:
data-ng-repeat="x in dashboard.visibleFaqs track by x.id | categoryFilter:dashboard.selectedCategoryId"
能否粘贴将控制器绑定到html的代码ex:ng controller=“someCtrl as cm”
?@Haymaker87我粘贴了包装器div,感谢您查看我的问题!