2016-11-01 2 views
1

Как я могу получить значение входного текста и сравнить со значением объекта с массивом?Угловой JS пользовательский заказ по функции

Когда я печатаю имя свойства массива комментариев, необходимо заказать этот текст, который был напечатан.

Например, укажите тип автора по автору. Я ищу об этом, прочитал документацию, но я не нашел решения. Могу ли я передать функцию в порядке? Я стараюсь, но не работает.

Я нашел слишком много примеров, передающих только одно значение или без ввода текста, и я хочу передать 3 варианта на заказ, если автор, рейтинг или дата, но если кто-то напечатает эти слова во входном тексте.

Почему не работает так:

Sort by: <input type="text" ng-model="**sortBy**"> 
        <div ng-repeat="dishcomment in dishCtrl.dish.comments|filter:**sortBy**"> 

var dish={ 
    name:'Uthapizza', 
    image: 'images/uthapizza.png', 
    category: 'mains', 
    label:'Hot', 
    price:'4.99', 
    description:'A unique combination of Indian Uthappam (pancake) and Italian pizza, topped with Cerignola olives, ripe vine cherry tomatoes, Vidalia onion, Guntur chillies and Buffalo Paneer.', 
    comments: [ 
     { 
      rating:5, 
      comment:"Imagine all the eatables, living in conFusion!", 
      author:"John Lemon", 
      date:"2012-10-16T17:57:28.556094Z" 
     }, 
     { 
      rating:4, 
      comment:"Sends anyone to heaven, I wish I could get my mother-in-law to eat it!", 
      author:"Paul McVites", 
      date:"2014-09-05T17:57:28.556094Z" 
     }, 
     { 
      rating:3, 
      comment:"Eat it, just eat it!", 
      author:"Michael Jaikishan", 
      date:"2015-02-13T17:57:28.556094Z" 
     }, 
     { 
      rating:4, 
      comment:"Ultimate, Reaching for the stars!", 
      author:"Ringo Starry", 
      date:"2013-12-02T17:57:28.556094Z" 
     }, 
     { 
      rating:2, 
      comment:"It's your birthday, we're gonna party!", 
      author:"25 Cent", 
      date:"2011-12-02T17:57:28.556094Z" 
     } 
    ] 
}; 

this.dish = dish; 
Sort by: <input type="text" ng-model="searchBox"> 
      <div ng-repeat="dishcomment in dishCtrl.dish.comments | orderBy:searchBox track by $index"> 
      <blockquote> 
       <p>{{dishcomment.rating}} Stars</p> 
       <p>{{dishcomment.comment}}</p> 
       <small>{{dishcomment.author}} 
       {{dishcomment.date | date:'MMM.dd, yyyy'}}</small> 
      </blockquote> 
+1

Вы посмотрели на это: http://stackoverflow.com/questions/27454658/ng-repeat-orderby-object? – DivineTraube

+1

, если я полностью не понял вопрос, это функционально, как написано: http://plnkr.co/edit/poU4KXsy9GZFeLjnnsZ6. Набрав 'рейтинг', порядок меняется, как и ввод' comment' или 'author'. – Claies

+0

Это не то, что нужно иметь в виду. Я просто хочу вызвать функцию, которая получает значение ввода и проверяет, был ли один вариант порядком ng-repeat. – gise

ответ

0

Вместо HTML фильтров можно попробовать положить фильтры на код контроллера и обновить список на ng- изменение ввода. Это будет:

  1. Легче понять.
  2. Будет лучше для большого списка, так как количество созданных наблюдателей будет намного меньше, чем фильтры html.

    $scope.sortBy = function(){ 
    if($scope.dish.comments.hasOwnProperty($scope.sortByProp)){ 
    
        //sort the comments by the property 
        $scope.dish.comments = sortedComments; 
    
    }} 
    

Ниже приводится фрагмент кода HTML:

<input type="text" ng-model="sortByProp" ng-change="sortBy()"> 
+0

Спасибо. Я нашел способ сделать с orderby, работает без(). – gise

1

Вы можете написать пользовательский фильтр в угловой, как показано ниже:

app.filter('commentsFilter', function ($filter) {  
    return function (inputArray, orderBy) { 
    var outputArray = []; 

    if (order) { 
     angular.forEach(inputArray, function (input) { 
      if(orderBy === 'author'){ 
       // Sort by author logic goes here 
       // Modify outputArray with sorted data 
      } 
      if(orderBy === 'date'){ 
       // Sort by date logic goes here 
       // Modify outputArray with sorted data 
      }     
     }); 
    } else { 
     return inputArray; 
    } 
    return outputArray; 
    }; 
}); 

HTML фрагмент кода, как показано ниже

Sort by: <input type="text" ng-model="searchBox"> 
     <div ng-repeat="dishcomment in dishCtrl.dish.comments | commentsFilter:searchBox track by $index"> 
     <blockquote> 
      <p>{{dishcomment.rating}} Stars</p> 
      <p>{{dishcomment.comment}}</p> 
      <small>{{dishcomment.author}} 
      {{dishcomment.date | date:'MMM.dd, yyyy'}}</small> 
     </blockquote> 
     </div>  
+0

Спасибо, но я нахожу простой способ сделать это: http://stackoverflow.com/questions/37100705/order-by-elements-based-on-input-text-angularjs/38962231#38962231 Просто обдумывая пустую строку проблема. И если я хочу работать funtion, но без() – gise

Смежные вопросы