javascript - indexOf() == -1 doesn't seem to work when pushing to an array -
javascript - indexOf() == -1 doesn't seem to work when pushing to an array -
i have array filtered/searched when type input box. when nail homecoming input text appended array. great , works.
what not working $scope.list.indexof() == -1 supposed stop me entering duplicates. not work.
where going wrong?
html
<!doctype html> <html ng-app="bgapp"> <head> <title>list & tag</title> <!-- latest compiled , minified css --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css"> <!-- local css --> <link rel="stylesheet" type="text/css" href="./static/css/dev-style.css" /> </head> <body> <div ng-controller="listcontroller"> <div class="row"> <div class="col-xs-12 col-sm-12 col-md-12 div-title"> <div class="col-xs-6 col-sm-6 col-md-6"> <h1><small>{{title}}</small></h1> <input type="text" ng-enter="additem()" ng-model="addname" class="search-query" placeholder="search"> </div> </div> </div> <div class="row"> <div class="col-xs-12 col-sm-12 col-md-12 div-title"> <div class="col-xs-3 col-sm-3 col-md-3">name of item</div> </div> <div class="col-xs-12 col-sm-12 col-md-12 div-row" ng-repeat="item in list | filter:addname"> <div class="col-xs-3 col-sm-3 col-md-3">{{ item.name }}</div> </div> </div> </div> <!-- angularjs scripts cdn --> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.14/angular-resource.min.js"></script> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.14/angular-animate.min.js"></script> <!-- jquery scripts cdn --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> <!-- bootstrap scripts compiled , minified javascript --> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script> <!-- locally installed scripts --> <script src="./js/bgapp.js"></script> </body> </html>
the app, directive & controller
var bgapp = angular.module('bgapp', []) .directive('ngenter', function () { homecoming function (scope, element, attrs) { element.bind("keydown keypress", function (event) { if (event.which === 13) { scope.$apply(function () { scope.$eval(attrs.ngenter, { 'event': event }); }); event.preventdefault(); } }); }; }); bgapp.controller('listcontroller', ['$scope', function($scope) { $scope.title = 'recent activity'; $scope.list = [ {name: 'user 1'}, {name: 'admin 1'}, {name: 'service 1'}, {name: 'project 1'}, {name: 'configuration item 1'}, {name: 'task 1'}, {name: 'incident 1'}, {name: 'issue 1'}, {name: 'known issue 1'}, {name: 'problem 1'}, {name: 'knowledge base of operations 1'}, {name: 'update 1'}, {name: 'document 1'}, ]; $scope.additem = function() { var elem = {name: $scope.addname}; if ($scope.list.indexof(elem) == -1) { $scope.list.push( elem ); } }; }]);
since $scope.list
list of object
, testing $scope.list.indexof(elem)
works references of 2 object
s, differents.
you utilize $filter('filter')(array, expression, comparator)
angularjs:
$scope.additem = function() { var elem = {name: $scope.addname}; if ($filter('filter')($scope.list, {name: elem.name}).length == 0) { $scope.list.push( elem ); } };
javascript angularjs
Comments
Post a Comment