我对角度很新,没有太多的前端体验。 我使用角度+素材用户界面,尝试做的是用户更改过滤器,这些更改应反映到网址,例如假设,用户更改了名为" search_term"的输入字段的值。要成为" foo",网址应为example.com/search/?search_term=foo 所以,我有这样的事情:
<md-input-container flex="50">
<label>Search term</label>
<input type="text" name="search_term" ng-model="CTRL.search_term" required />
</md-input-container>
我试图做的是:
$scope.$groupWatch(['search_term', 'duration', ... ], function (newValues, oldValues, scope)) {
// assemble filter values, create query string, replace old query string with new one
var qs = assembleNewQs();
$location.search(qs);
}
我意识到这不会起作用,因为我angular
覆盖了我的所有手表,因为我在表达式中引用了这些变量。
我不想做类似的事情:
var currentQs = $location.search();
$timeout(function () {
var newQs = assembleNewQs();
if (currentQs != newQs) {
$location.search(newQs);
currentQs = newQs;
}
}, 100);
当然,这会有用,但还有其他更干净,或者说,angularish
这样做的方法吗?
答案 0 :(得分:0)
我只会在提交时更改网址而不是更改...
使用路由进行此操作的方法是:
$scope.submitSearch = function(query) {
$state.go('search', {
'search_term': query
});
};
设置路线:
$stateProvider
.state('search', {
url: '/search/?query',
controller: 'SearchController',
templateUrl: 'views/search.html'
});