AngularJS在更改路线时清除模型

问题描述:

我有一个过滤器&我的固定标题包含下拉列表(用于过滤器)和输入字段(用于搜索)的搜索功能。AngularJS在更改路线时清除模型

对于下拉我使用这个Angularjs-dropdown-multiselect

目前,提交申请后,用户将被引导到结果页面和下拉菜单和输入文本模型内容被保留,这就是我多么希望它成为。问题是,如果用户转到结果页面以外的页面,我想重置模型(回到空)。

HTML:

<div class="col-sm-3"> 
    <div class="dropdown" ng-dropdown-multiselect="" options="cats" selected-model="catModel" checkboxes="true" translation-texts="{buttonDefaultText: 'Categories'}"></div> 
</div> 

<div class="col-sm-3"> 
    <div class="dropdown" ng-dropdown-multiselect="" options="ccs" selected-model="ccModel" checkboxes="true" translation-texts="{buttonDefaultText: 'Credit Cards'}"></div> 
</div> 

<div class="col-sm-6"> 
    <form data-ng-submit="findValue(catModel, ccModel, keyword)" > 
     <div class="input-group search-bar"> 
      <input type="search" class="form-control" placeholder="Search for..." data-ng-model="keyword"> 
      <span class="input-group-btn"> 
       <button class="btn btn-search" type="button" data-ng-click="findValue(catModel, ccModel, keyword)"><img src="img/icon_search.png" alt="Search" /></button> 
      </span> 
      <input type="submit" style="position: absolute; left: -9999px; width: 1px; height: 1px;"/> 
     </div> 
    </form>     
</div> 

JS:

.controller('mainController', ['$scope', '$http', '$location', 'dataFactory', 
function ($scope, $http, $location, dataFactory){ 
    dataFactory.getCategories().success(function (data){ 
     $scope.cats = data; 
    }); 

    dataFactory.getCcs().success(function (data){ 
     $scope.ccs = data; 
    }); 
    $scope.catModel = []; 
    $scope.ccModel = []; 

    $scope.findValue = function(catModel, ccModel, keyword) { 
    var searchUrl = baseUrl; 
    var catID = '';  
    if(catModel.length > 0) { 
     searchUrl += 'categoryID='; 
     angular.forEach(catModel, function(value, key) { 
      if(key < catModel.length - 1) { 
       searchUrl += value.id + ','; 
       catID += value.id + ','; 
      } else { 
       searchUrl += value.id; 
       catID += value.id; 
      } 
     }) 
     if(ccModel.length > 0 | keyword != null) { 
      searchUrl += '&'; 
     }    
    } 

    if(ccModel.length > 0) { 
     searchUrl += 'ccID='; 
     angular.forEach(ccModel, function(value, key) { 
      if(key < ccModel.length - 1) { 
       searchUrl += value.id + ','; 
      } else { 
       searchUrl += value.id; 
      } 
     }) 
     if(keyword != null) { 
      searchUrl += '&'; 
     }     
    } 

    if(keyword != null) { 
     searchUrl += 'search_keyword=' + keyword; 
    } 

    $http.get(searchUrl).success(function (data) { 
     $scope.results = data; 
     $scope.pageTitle = 'Promotions search result'; 
     $location.path('/promotion'); 
    }) 
} 
} 

我把模型和函数内部mainController,因为头是每个视图。

我在AngularJS和编程方面很新,所以这段代码可能不正确,请让我知道是否有更简单和正确的方法。任何帮助表示赞赏。 谢谢

+0

是'submit'重定向到另一个网址? – itzMEonTV 2015-02-23 13:40:10

+0

是的,它会重定向到不同的视图和不同的$ location.path结果页 – Astarthe 2015-02-23 14:49:08

+0

那么为什么不设置'$ scope.keyword ==“”'就在'$ location.path'之前 – itzMEonTV 2015-02-23 14:52:25

您可以订阅以下事件$locationChangeSuccess,这些事件将在每个位置更改时触发。 在里面你可以重置你的模型。

只是声明

$rootScope.$on('$locationChangeSuccess', function() { 
    //reset your model here 
}); 
+0

这是否意味着模型必须位于$ rootScope中? – Astarthe 2015-02-23 14:51:38

+0

我把我的代码的一些例子,如果你使用你的模型只在控制器$范围内,你可以把它放在控制器的$范围 – 2015-02-23 15:26:51

+0

感谢您的解决方案! – Astarthe 2015-02-24 16:25:24