在Angular中输入输入字段时过滤ng-repeat结果

时间:2015-05-30 21:48:02

标签: javascript angularjs

问题

我希望这样做,以便当有人输入搜索输入字段时,通过Angular的ng-repeat指令呈现的结果将被其查询过滤。在较小的范围内,我已经看到它在Angular文档中的example中有效,但我无法在我自己的代码中使用它。

目前我正在使用Foundation for Apps.

以下是我的Github回购链接: https://github.com/onlyandrewn/angular

client / templates / home.html(输入[type =“search”]& ng-controller)

---
name: home
url: /
---

<header>
    <p class="sponsored">Sponsored by </p>
    <img src="http://placehold.it/200x30" class="sponsors" alt="">
    <h1>Business Directory</h1>
    <div class="find" ng-controller="MainCtrl">
        <label for="looking">
            <i class="fa fa-search"></i>
        </label>
        <input type="search" placeholder="What are you looking for?" ng-model="query">
        <input type="submit">

    </div><!-- /.find -->
    <ul>
        <li class="popular">Popular searches:</li>
        <li>tk-category <span>|</li>
        <li>tk-category <span>|</span></li>
        <li>tk-category <span>|</span></li>
        <li>tk-category <span>|</span></li>
        <li>tk-category </li>
    </ul>
</header>

<div class="businesses">
    <p class="number">tk-number of businesses</p><button class="filter button">Filter by <i class="fa fa-chevron-down"></i></button>
    <div class="options">
        <div class="cat">
            <div class="categories">
                <div class="group">
                    <p class="name">Grade Level</p>
                    <div class="check">
                        <input type="radio" name=""><p>Auto</p>
                        <input type="checkbox" name=""><p>Restaurant</p>
                        <input type="checkbox" name=""><p>Other</p>
                    </div><!-- /.check -->
                </div><!-- /.group -->

                <div class="group">
                    <p class="name">School Type</p>
                    <div class="check">
                        <input type="checkbox">
                        <input type="checkbox">
                        <input type="checkbox">
                        <input type="checkbox">
                        <input type="checkbox">
                    </div><!-- /.check -->
                </div><!-- /.group -->
            </div><!-- /.categories -->
        </div><!-- /.cat -->
    </div><!-- /.options -->
</div><!-- /.businesses -->

<div class="all" ng-controller="MainCtrl">
    <div class="business large-4.columns" data-ng-repeat="business in businesses | filter:query" >
        <div class="overlay">
            <img src="http://placehold.it/300x300" class="storefront" alt="">
        </div><!-- /.overlay -->
        <div class="info">
            <p class="name">{{business.name}}</p>
            <p class="description">{{business.description}}</p>
            <p class="address">{{business.address}}</p>
            <a href="" class="website">{{business.website}}</a>
        </div><!-- /.info -->
    </div>
</div>

<footer>
    <p>Back to top</p>
</footer>

<!-- <div class="buttons">
    <button class="alp">Alphabetically</button>
    <button class="exp">Expanded</button>
    <button class="con">Condensed</button>
</div> -->

<!-- <div class="grid-container"> -->
<!-- </div> -->

scripts.js(来自ng-repeat的数据来自)

myApp.controller('MainCtrl', function($scope) {
  $scope.businesses = [
  {
   id: 0,
   name: "Andrew Nguyen",
   description: "I'm a web developer",
   address: "322 11th Street, Brandon, MB",
   website: "http://andrewnguyen.ca"
 },
 {
   id: 1,
   name: "Mary Yacoubian",
   description: "I'm a dental hygenist",
   address: "18 Wishford Drive",
   website: "http://quitecontrary.com"
 },
 {
   id: 2,
   name: "John Axon",
   description: "I'm a jack of all trades",
   address: "1101 Mississauga Rd.",
   website: "http://johnaxon.com"
 },
 {
   id: 3,
   name: "John Axon",
   description: "I'm a jack of all trades",
   address: "1101 Mississauga Rd.",
   website: "http://johnaxon.com"
 }]
});

app.js

'use strict';

  var myApp = angular.module('application', [
    'ui.router',
    'ngAnimate',

    //foundation
    'foundation',
    'foundation.dynamicRouting',
    'foundation.dynamicRouting.animations'
  ])
    .config(config)
    .run(run)
  ;

  config.$inject = ['$urlRouterProvider', '$locationProvider'];

  function config($urlProvider, $locationProvider) {
    $urlProvider.otherwise('/');

    $locationProvider.html5Mode({
      enabled:false,
      requireBase: false
    });

    $locationProvider.hashPrefix('!');
  }

  function run() {
    FastClick.attach(document.body);
  }

1 个答案:

答案 0 :(得分:2)

由于每个controller都是MainCtrl的新实例,ng-model="query"必须位于同一控制器MainCtrl下。

<div ng-controller="MainCtrl">
    <header>
        <p class="sponsored">Sponsored by </p>
        <img src="http://placehold.it/200x30" class="sponsors" alt="">
        <h1>Business Directory</h1>
        <div class="find">
            <label for="looking">
                <i class="fa fa-search"></i>
            </label>
            <input type="search" placeholder="What are you looking for?" ng-model="query">
            <input type="submit">

        </div><!-- /.find -->
        <ul>
            <li class="popular">Popular searches:</li>
            <li>tk-category <span>|</li>
            <li>tk-category <span>|</span></li>
            <li>tk-category <span>|</span></li>
            <li>tk-category <span>|</span></li>
            <li>tk-category </li>
        </ul>
    </header>

    <div class="businesses">
        <p class="number">tk-number of businesses</p><button class="filter button">Filter by <i class="fa fa-chevron-down"></i></button>
        <div class="options">
            <div class="cat">
                <div class="categories">
                    <div class="group">
                        <p class="name">Grade Level</p>
                        <div class="check">
                            <input type="radio" name=""><p>Auto</p>
                            <input type="checkbox" name=""><p>Restaurant</p>
                            <input type="checkbox" name=""><p>Other</p>
                        </div><!-- /.check -->
                    </div><!-- /.group -->

                    <div class="group">
                        <p class="name">School Type</p>
                        <div class="check">
                            <input type="checkbox">
                            <input type="checkbox">
                            <input type="checkbox">
                            <input type="checkbox">
                            <input type="checkbox">
                        </div><!-- /.check -->
                    </div><!-- /.group -->
                </div><!-- /.categories -->
            </div><!-- /.cat -->
        </div><!-- /.options -->
    </div><!-- /.businesses -->

    <div class="all">
        <div class="business large-4.columns" data-ng-repeat="business in businesses | filter:query" >
            <div class="overlay">
                <img src="http://placehold.it/300x300" class="storefront" alt="">
            </div><!-- /.overlay -->
            <div class="info">
                <p class="name">{{business.name}}</p>
                <p class="description">{{business.description}}</p>
                <p class="address">{{business.address}}</p>
                <a href="" class="website">{{business.website}}</a>
            </div><!-- /.info -->
        </div>
    </div>

    <footer>
        <p>Back to top</p>
    </footer>

    <!-- <div class="buttons">
        <button class="alp">Alphabetically</button>
        <button class="exp">Expanded</button>
        <button class="con">Condensed</button>
    </div> -->

    <!-- <div class="grid-container"> -->
    <!-- </div> -->
</div>
相关问题