scope - Sharing data between functions in angularjs -


i trying implement 2 functions in an angular app implement filter (start letters to), code stops working. on own, (add/delete) functions work turn data factory , try access filter functions fails.

working functions:

$scope.items = items;  $scope.deleteitem = function (index) {     items.data.splice(index, 1); } $scope.additem = function (index) {     items.data.push({         name: $scope.newitemname     }); } 

what causes whole thing break:

//filtering letters _ not working     function setletters (from, to){         this.fromletter = from;         this.toletter = to;       }     //----    $scope.filter.startswithletter = function () {     return function (items, fromletter, toletter) {         var filtered = [];         (var = 0; < items.length; i++) {             var item = items[i];             var firstletter = item.name.substring(0, 1).tolowercase();             if ((!fromletter || firstletter >= fromletter)                 && (!toletter || firstletter <= toletter)) {                 filtered.push(item);             }         }     return filtered;    };  }); 

//--filtering letters

full code here: fiddle

there's few issues in fiddle. first i'm seeing "unexpected token )" error due ) on line 58.

then when fix there issue on line 45 trying assign value $scope.filter.startswithletter, when $scope.filter undefined. think want assign value $scope.startswithletter.

there still problem filtering. when filtering ng-repeat can specify filter or a predicate function. in each case arguments passed function different - please read docs. function as-is designed used in filter created angular.module('myapp', []).filter(). doesn't work when set on scope , pass filter: predicate function. if prefer filter using function on scope, rather creating reusable custom filter, need change accept correct arguments - see fiddle.

your page trying access setletters in $scope.items.data not setting $scope.items.data.setletters. don't think makes sense set there inside items.data anyway. perhaps set directly on scope? set fromletter , toletter directly on scope.

i moved setletter buttons inside <div ng-controller="itemscontroller" >

fiddle fixes


Comments