Ok... still tearing my hair out on this. Here is my entire controller code.
If anyone could help me figure out how this search is dying, that'd be
great.
/**
* Created by Daniel on 6/3/2014.
*/
'use strict';
var costControllers = angular.module('costControllers', ['ngGrid']);
//Get JSON
costControllers.factory('itemJSON', function($http){
return function(){
return $http.get('json/items.json').then(function(response) {
var promisedData = response.data;
return promisedData;
})
};
});
costControllers.controller('MainCostCtrl', ['$scope', '$http', '$filter',
'itemJSON', function($scope, $http, $filter, itemJSON){
$scope.title = "Special Fire Systems Cost Builder v.054";
var sortingOrder = 'id';
//Set initial values
$scope.sortingOrder = sortingOrder;
$scope.reverse = false;
$scope.filteredItems = [];
$scope.groupedItems = [];
$scope.itemsPerPage = 10;
$scope.pagedItems = [];
$scope.currentPage = 0;
$scope.itemList = [];
$scope.query = "";
$scope.addedItems = [];
$scope.selectPerPage = 10;
//Get Brand JSON and pass data
itemJSON().then(function(data){
$scope.itemList = data;
$scope.search();
});
var searchMatch = function (list, item) {
if (!item) {
return true;
}
return list.toLowerCase().indexOf(item.toLowerCase()) !== -1;
};
// init the filtered items
$scope.search = function () {
$scope.filteredItems = $filter('filter')($scope.itemList, function
(item) {
var result = [];
for(var prop in item){
if (item.hasOwnProperty(prop)) {
//console.log(prop + " -> " + item[prop]);
if(item[prop] === item['id']) continue;
if( searchMatch(item[prop], $scope.query) ){
result.push(item[prop]);
}
}
}
console.log(result);
return result;
//original search loop for the query
/*for(var prop in item){
if (item.hasOwnProperty(prop)) {
console.log(prop + " -> " + item[prop]);
if(item[prop] === item['id']) continue;
if( searchMatch(item[prop], $scope.query) ){
return true;
}
}
}
return false;*/
});
console.log($scope.filteredItems);
// take care of the sorting order
if ($scope.sortingOrder !== '') {
$scope.filteredItems = $filter('orderBy')($scope.filteredItems,
$scope.sortingOrder, $scope.reverse);
}
$scope.currentPage = 0;
// now group by pages
$scope.groupToPages();
};
// calculate page in place
$scope.groupToPages = function () {
$scope.pagedItems = [];
for (var i = 0; i < $scope.filteredItems.length; i += 1) {
if (i % $scope.itemsPerPage === 0) {
$scope.pagedItems[Math.floor(i / $scope.itemsPerPage)] = [
$scope.filteredItems[i] ];
} else {
$scope.pagedItems[Math.floor(i /
$scope.itemsPerPage)].push($scope.filteredItems[i]);
}
}
};
$scope.range = function (start, end) {
var ret = [];
if (!end) {
end = start;
start = 0;
}
for (var i = start; i < end; i += 1) {
ret.push(i);
}
return ret;
};
$scope.prevPage = function () {
if ($scope.currentPage > 0) {
$scope.currentPage -= 1;
}
};
$scope.nextPage = function () {
if ($scope.currentPage < $scope.pagedItems.length - 1) {
$scope.currentPage += 1;
}
};
$scope.setPage = function () {
$scope.currentPage = this.n;
};
// change sorting order
$scope.sort_by = function(newSortingOrder) {
if ($scope.sortingOrder == newSortingOrder)
$scope.reverse = !$scope.reverse;
$scope.sortingOrder = newSortingOrder;
$scope.search();
// icon setup
$('th.costHead').each(function(){
// icon reset
$(this).removeClass().addClass('sorting');
});
if ($scope.reverse)
$('th.'+ newSortingOrder).removeClass().addClass('sorting_asc');
else
$('th.'+
newSortingOrder).removeClass().addClass('sorting_desc');
};
//selects item from table and sends to array
$scope.itemSelect = function(item) {
var added = $scope.addedItems.some(function(match){
return match.id === item.id;
});
if (!added){
$scope.addedItems.push(item);
}
console.log( $scope.addedItems );
};
//removes item from added items array
$scope.removeItemSelect = function (item) {
var index = $scope.addedItems.indexOf(item);
$scope.addedItems.splice(index, 1);
};
// set the number of items per page
$scope.$watch('selectPerPage', function(){
$scope.itemsPerPage = $scope.selectPerPage;
$scope.groupToPages();
});
//Table Sizing
//Inject controller
costControllers.$inject = ['$scope', '$filter'];
}]);
And here is the relevant html
</select>
<input type="text" ng-model="query"
ng-change="search()" style="float: right" class="" placeholder="Search...">
</div>
<!-- /.panel-heading -->
<div class="panel-body">
<tr class="paging_total_row">
<div
class="total_con">{{filteredItems.length}} total items</div>
<div class="dataTables_paginate
paging_simple_numbers">
<ul class="pagination">
<li class="paginate_button previous
disabled" ng-class="{disabled: currentPage == 0}">
<a href ng-click="prevPage()">«
Prev</a>
</li>
<li class="paginate_button"
ng-repeat="n in
range(pagedItems.length)"
ng-class="{active: n ==
currentPage}"
ng-click="setPage()">
<a href ng-bind="n + 1">1</a>
</li>
<li class="paginate_button next"
ng-class="{disabled: currentPage == pagedItems.length - 1}">
<a href
ng-click="nextPage()">Next »</a>
</li>
</ul>
</div>
</tr>
<div class="table-responsive">
<table class="table table-striped
table-bordered table-hover" id="itemTables">
<thead>
<tr role="row">
<th class="sorting costHead"
ng-click="sort_by('brand')">Brand</th>
<th class="sorting costHead"
ng-click="sort_by('name')">Item</th>
<th class="sorting costHead"
ng-click="sort_by('description')">Description</th>
<th class="sorting costHead"
ng-click="sort_by('part_number')">Part Number</th>
<th class="sorting costHead"
ng-click="sort_by('supplier')">Supplier</th>
<th class="sorting costHead"
ng-click="sort_by('cost')">Cost</th>
</tr>
</thead>
<tbody>
<tr role="row" ng-repeat="item in
pagedItems[currentPage] | orderBy:sortingOrder:reverse"
ng-click="itemSelect(item)">
<td
class="table_li">{{item.brand}}</td>
<td
class="table_li">{{item.name}}</td>
<td
class="table_li">{{item.description}}</td>
<td
class="table_li">{{item.part_number}}</td>
<td
class="table_li">{{item.supplier}}</td>
<td
class="table_li">{{item.cost | currency:"$"}}</td>
</tr>
</tbody>
On Monday, September 29, 2014 8:48:34 AM UTC-5, Daniel Turner wrote:
>
> Thanks for the reply Sander. I'm gonna give that a shot and see what
> happens. I'll let you know, for sure.
>
> On Monday, September 29, 2014 5:08:15 AM UTC-5, Sander Elias wrote:
>>
>> Hi Daniel,
>>
>> My guess, without seeing the rest of your code is that you don’t need to
>> do a return true.
>> but you need to add the matched item to an result array.
>>
>> Regards
>> Sander
>>
>>
>
--
You received this message because you are subscribed to the Google Groups
"AngularJS" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/angular.
For more options, visit https://groups.google.com/d/optout.