2016-08-23 57 views
5

名单我有一个页面一个搜索框,即了header.html文件和列表上,我想要实现的搜索功能上的另一页即content.html。那么如何在这种情况下使用angularjs搜索功能。以下是html代码。搜索在角JS

了header.html

<div class="input-group col-md-12 search-inner-page "> 
    <input type="text" class="form-control" placeholder="Search" name="q"> 
</div> 

content.html

<div class="surveyList" ng-repeat="survey in allSurveys"> 
    <span class="checkbox" ></span> 
    <div class="toogleSurvey row" ng-mouseover="hoverIn()" ng-mouseleave="hoverOut()"> 
     <div class="col-xs-5 col-sm-2 col-md-2">{{survey.Name}}</div> 
     <div class="col-xs-5 col-sm-1 col-md-1">{{survey.Type}}</div> 
     <div class="col-sm-3 col-md-3 hidden-xs">{{survey.SurveyReference}}</div> 
     <div class="col-sm-3 col-md-3 hidden-xs">{{survey.CreatedDate}}</div> 
     <div class="col-sm-2 col-md-2 hidden-xs SurveyLastChild">{{survey.Status}}</div> 
     <div class="hidden-xs surveyListTool" ng-show="hoverEdit"> 
     <a class="editSurvey" title="edit"></a> 
     <a class="deleteSurvey" title="delete"></a> 
     <a class="exportSurvey" title="export survey"></a> 
     <a class="menuSurvey" title="menu"></a> 
    </div> 
</div> 

contentCtrl.js

angular.module("adminsuite").controller("surveyController",['getAllSurveyService','AuthenticationService', '$scope','$rootScope', '$state', function(getAllSurveyService,AuthenticationService, $scope,$rootScope,$state){ 

getAllSurveyService.surveyList().then(
function(data) { 
    $scope.allSurveys = data; 
    console.log($scope.allSurveys); 
    if($scope.allSurveys.ErrorMessage){ 
     AuthenticationService.ClearCredentials(); 
     $state.go('login'); 
    } 
} 
); 

}]); 

个headerController.js

angular.module("adminsuite").controller("headerController",['AuthenticationService','$rootScope','$cookieStore','$scope',function(AuthenticationService,$cookieStore,$scope,$rootScope){ 
    $scope.header = "Header"; 
    $scope.searchInSurvey = $scope.surveySearch; 
    $scope.logout = function(){ 
       //$scope.dataLoading = true; 
       AuthenticationService.ClearCredentials(); 
       console.log($cookieStore.get('globals')); 
       //$state.go('login'); 
      }; 
    }]); 

header.html中的搜索框中输入的东西如上面提到的,应当搜索内容content.html页。

+0

你还有什么在header.html中?请使用输入文本元素来做其他事情吗? – Aravind

回答

0

感谢你们。我得到了这样的答案...

了header.html

<div class="input-group col-md-12 search-inner-page"> 
         <input type="text" class="form-control" placeholder="Search" name="q" ng-model="global.search"> 
         <img src = "images/search.png" alt = "Generic placeholder thumbnail" > 
        </div> 

内容。HTML

<div class="surveyList" ng-repeat="survey in allSurveys | filter:global.search"> 
<span class="checkbox" ></span> 
<div class="toogleSurvey row" ng-mouseover="hoverIn()" ng-mouseleave="hoverOut()"> 
    <div class="col-xs-5 col-sm-2 col-md-2">{{survey.Name}}</div> 
    <div class="col-xs-5 col-sm-1 col-md-1">{{survey.Type}}</div> 
    <div class="col-sm-3 col-md-3 hidden-xs">{{survey.SurveyReference}}</div> 
    <div class="col-sm-3 col-md-3 hidden-xs">{{survey.CreatedDate}}</div> 
    <div class="col-sm-2 col-md-2 hidden-xs SurveyLastChild">{{survey.Status}}</div> 
    <div class="hidden-xs surveyListTool" ng-show="hoverEdit"> 
    <a class="editSurvey" title="edit"></a> 
    <a class="deleteSurvey" title="delete"></a> 
    <a class="exportSurvey" title="export survey"></a> 
    <a class="menuSurvey" title="menu"></a> 
</div> 

headerCtrl.js

$rootScope.global = { 
    search: '' 
}; 
0

您可以在header.html的输入中使用ng-change来更新allSurveys数组。

只需添加一个ng-changeng-model您输入

<div class="input-group col-md-12 search-inner-page "> 
    <input ng-model="yourCtrl.searchInput" ng-change="yourCtrl.searchInputChanged" type="text" class="form-control" placeholder="Search" name="q"> 
</div> 

在你的控制器,你可以添加一个功能searchInputChanged将使用.filter()筛选基于searchInput数据。

+0

如果我为这两个视图使用两个不同的控制器,那么它会在这种情况下工作吗? – Kishan

+0

如果你使用2个控制器,你应该创建一个服务。您的服务可以返回content.html中使用的数组“allSurveys”,而header.html中的用户控制器可以调用相同的服务来设置过滤器。 – Eric

+0

你能告诉我如何在我的例子中使用服务?我已经从“调查控制器”中获得了所有调查。如何为其创建过滤器 – Kishan

0

您可以设置一个变量为$ rootScope您调查的名单,并从另一个控制器得到它的价值,像这样:

//Controller that contains the list 
$rootScope.surveysList = [s1,s2,s3,...,sn]; 

之后,你就可以得到这个变量,并设置到控制器您输入的范围。

$scope.allSurveys = $rootScope.surveysList; 

你输入应该是这样的:

<input ng-model="surveySearch" type="text" class="form-control" placeholder="Search" name="q"> 

而在你的列表模板阙查询应该是这样的:

ng-repeat="survey in allSurveys | filter:surveySearch" 

我希望它为你工作

+0

这不适用于我 – Kishan

+0

您是否将$ rootScope设置为两个控制器的依赖关系? –

+0

我已经添加了你提到的所有东西。事情是ng-model =“surveySearch”与其关联的特定控制器的范围对象变量。所以如果我试图访问这个HTML模板以外如何访问做到这一点? – Kishan