Angular JS $范围查询

时间:2014-05-09 12:18:08

标签: javascript angularjs angularjs-scope

我试图执行以下操作:

在搜索框中输入内容,执行相关搜索并显示在单独的视图模板中定义的结果。

搜索thingy是页眉的一部分,因此,我的索引页面如下:

的index.html

<div class="row search-box">

    <div class="col-md-2"></div>
    <div class="col-md-6">

        <form id="myForm" class="form-inline form-search"
            style="padding-left: 10px">
<!-- Search box -->
            <input id="in" type="text" ng-model="searchTerm" placeholder="Search for products, categories or brands"
                class="search-query input-search">

            <button class="btn searchBtn" ng-click="doSearch()" ng-controller="MediaListController">
                <i class="icon-search"></i>Search
            </button>

        </form>
    </div>
    <div class="col-md-3">

     <div class="btn btn-blue cart-btn-cont">
        <span class="cart-icon"></span>
     </div>
    </div>
</div>

...

<div ng-view></div>

控制器(相关功能)

$scope.doSearch = function () {

    var type = $scope.mediaType;
    $scope.foundItems = MediaService.search().length;
    console.log("Found items :"+ $scope.foundItems + "for search term :"+ $scope.searchTerm);
    $location.path("/search");
}

app.js

var app= angular.module('sampleApp', ['ngRoute','ngResource','mgcrea.ngStrap']);
app.config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/login', {templateUrl: 'app/views/partials/login.html',     controller: 'LoginController'});   
$routeProvider.when('/search', {templateUrl :  'app/views/partials/tpl/search_result.tpl.html'});
$routeProvider.when('/', {templateUrl: 'app/views/landing_page.html',   controller: 'MediaListController'});    
$routeProvider.otherwise({redirectTo: '/'});
}]);

搜索结果模板:

Found {{ foundItems }} product(s) for search phrase <i>"{{searchTerm}}"</i>

一切正常,但在进入这个阶段时,我对以下内容感到困惑:

一个。为什么 $ scope.foundItems 在模板中不可见,即{{foundItems}}仅在我在控制器中使用 $ scope。$ parent.foundItems 时才有效?

湾如果正在创建新的子范围,那么 $ scope.searchTerm 如何在视图模板中可用,即{{searchTerm}}?是因为ng-model =&#34; searchTerm&#34;在rootScope中创建模型绑定?

C。我还看到,如果我使用 $ rootScope.foundItems ,模板中的{{foundItems}}工作正常,但如果我想避免使用$ rootScope,那么使用$ scope。$ parent有效吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

一个。为什么$ scope.foundItems在模板中不可见,即{{foundItems}}只有在控制器中使用$ scope。$ parent.foundItems时才有效? 我认为在ng-view中分配相同的控制器然后在按钮上分配另一个标签有点奇怪。因为按钮会在那里创建自己的范围。然后ng-view也会创建一个。

湾如果正在创建一个新的子范围,那么视图模板中有哪些$ scope.searchTerm可用,即{{searchTerm}}?是因为ng-model =&#34; searchTerm&#34;在rootScope中创建模型绑定? 该范围实际上与doSearch范围无关。

℃。我还看到模板中的{{foundItems}}工作正常,如果我使用$ rootScope.foundItems,但如果我想避免使用$ rootScope,那么使用$ scope。$ parent有效吗? 您可能应该为该页面设置一个主控制器,然后从那里调用所有内容。