收集过滤后的ng重复数据以在控制器中使用
collect filtered ng-repeat data to use in controller
我正试图用Mongo DB中的数据在响应网格中构建一个图片库。来自数据库的数据是这样的形式。名称,图像,关键字,简历,参考",可搜索,
我从一个ng重复开始,显示基于图片关键字的类别选择复选框。这似乎很有效。
p CATEGORIES:
span.formgroup(data-ng-repeat='category in mongoController.catData')
input.checks( type='checkbox', ng-model='mongoController.filter[category]')
| {{category}}
以下是对关键字复选框进行排序和标识的工厂:
getCategories: function (cat) {
return (cat || []).map(function (pic) {
return pic.keyword;
}).filter(function (pic, idx, array) {
return array.indexOf(pic) === idx;
});
}
从那里,我过滤一个ng重复,以显示基于复选框选择的图片,和/或搜索字段,这也很好。
input.form-control.input-med(placeholder="Search" type='text', ng-model="search.searchable")
br
div.light.imageItem(data-ng-repeat="picture in filtered=( mongoController.allData | filter:search | filter:mongoController.filterByCategory)")
a(data-toggle="modal", data-target="#myModal", data-backdrop="static", ng-click='mongoController.selectPicture(picture)')
img( ng-src='../images/{{picture.image}}_tn.jpg', alt='Photo of {{picture.image}}')
p Number of results: {{filtered.length}}
显示图片列表的功能:
//Returns pictures of checkboxes || calls the noFilter function to show all
mongoController.filterByCategory = function (picture) {
return mongoController.filter[picture.keyword] || noFilter(mongoController.filter);
};
function noFilter(filterObj) {
for (var key in filterObj) {
if (filterObj[key]) {
return false;
}
}
return true;
}
如果您单击其中一张图片,会弹出一个模式框,其中包含所有输入字段,您可以在其中编辑图像特定字段。
我真正困难的部分是如何从过滤后的ng重复中收集可用数据,以便在控制器中使用,这样当模式框打开时,我可以在符合搜索标准的其他图片中向右或向左滚动。
任何建议都会有帮助,甚至你为什么要这样做?
当您声明过滤图片的ng repeat时,您的filtered
变量属于当前的$scope(目前我无法从问题中推断)。您可以使用controller As语法将filtered
变量与特定控制器关联:(即使用<elem ng-repeat="picture in ctrl.filtered = (ctrl.data | filter1 | filterN)"/>
)
示例:(也在jsfiddle中)
var mod = angular.module('myapp', []);
mod.controller('ctrl', function() {
var vm = this;
vm.data = ['alice', 'bob', 'carol', 'david', 'ema'];
vm.onbutton = function() {
// access here the filtered data that mets the criteria of the search.
console.log(vm.filtered);
}
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myapp" ng-controller="ctrl as vm">
<input ng-model="search" type="text" />
<p data-ng-repeat="item in vm.filtered = (vm.data | filter:search)">
{{item}}
</p>
<p>Items: {{vm.filtered.length}}</p>
<button ng-click="vm.onbutton()">Show me in console</button>
</div>
相关文章:
- 在控制器和数据对象之间同步数据
- 使用Ajax请求rails控制器数据
- 如何将控制器数据加载到javascript数组中
- 如何在 angular js 中访问子控制器内的父控制器数据
- 按天在视图中应用控制器数据
- 跳跃运动控制器数据的清理
- AngularJS-通过服务从指令更新控制器数据(this.model语法)
- AngularJS通过服务自动更新控制器数据
- AJAX中的AngularJS控制器数据并不总是有效的
- 自定义指令控制器数据与工厂数据同步
- 来自路由提供程序的访问控制器数据
- Angularjs的服务和控制器数据不同步
- Ui-sref阻止访问控制器数据或视图
- 控制器数据没有传递给指令
- Angular ui-router多个嵌套和控制器数据
- 停止搜索解析控制器数据
- 使用AngularJS指令修改控制器数据
- 如何设置第一个控制器数据另一个控制器
- 控制器数据以角度设置另一页
- 如何在viewjavascript中访问playframework's控制器数据