2017-12-12 11 views
0

私は検索と選択のために以下のコードを実装しようとしています。 http://plnkr.co/edit/o767Mg6fQoyc7jKq77If?p=preview角度jのvaluesFnはどのように機能しますか?

文字列ではなく、オブジェクトを渡そうとしているため、検索機能はオブジェクト全体を検索します。しかし、私は特定のキーだけを検索したい。

検索は、特に私が見ることは検索が

valuesFn(scope, locals) 

に上記のコードの3行目に起こる私は、この関数valuesFn(scope,locals)が何であるかを不思議とどのように私たことがある

function getMatches(searchTerm) { 
       var locals = { $searchTerm: searchTerm } 
       $q.when(valuesFn(scope, locals)).then(function (matches) { 
        if (!matches) return; 

        if (searchTerm === inputElement.val().trim()/* && hasFocus*/) { 
         matchMap = {}; 
         childScope.matches.length = 0; 
         for (var i = 0; i < matches.length; i++) { 
          locals[valueName] = matches[i]; 
          var value = valueFn(scope, locals), 
           label = displayFn(scope, locals); 

          matchMap[hashKey(value)] = { 
           value: value, 
           label: label/*, 
           model: matches[i]*/ 
          }; 

          childScope.matches.push(matches[i]); 
         } 
         //childScope.matches = matches; 
        } 

        if (needsDisplayText) setDisplayText(); 
       }, function() { 
        resetMatches(); 
       }); 
      } 

で起こりますオブジェクト全体ではなくオブジェクトキーの検索のみが可能です。

答えて

0

これは、ValuesFn()がどのように機能するかについての実際の質問に対する回答ではありません。私は、ここで、キー上のオブジェクトをフィルタリングする解決策を紹介しています。私は$ q.whenメソッドで角度JSフィルタ関数を使用しました。すなわち

$filter('filter')(scope.attributeItemLevel, { name: locals.$searchTerm }) 

機能全体がこのようになります。

function getMatches(searchTerm) { 
      var locals = { $searchTerm: searchTerm } 
      $q.when($filter('filter')(scope.attributeItemLevel, { name: locals.$searchTerm }))).then(function (matches) { 
       if (!matches) return; 

       if (searchTerm === inputElement.val().trim()/* && hasFocus*/) { 
        matchMap = {}; 
        childScope.matches.length = 0; 
        for (var i = 0; i < matches.length; i++) { 
         locals[valueName] = matches[i]; 
         var value = valueFn(scope, locals), 
          label = displayFn(scope, locals); 

         matchMap[hashKey(value)] = { 
          value: value, 
          label: label/*, 
          model: matches[i]*/ 
         }; 

         childScope.matches.push(matches[i]); 
        } 
        //childScope.matches = matches; 
       } 

       if (needsDisplayText) setDisplayText(); 
      }, function() { 
       resetMatches(); 
      }); 
     } 
関連する問題