将范围更改反映到当前URL

时间:2017-09-09 09:37:24

标签: javascript angularjs material-design

我对角度很新,没有太多的前端体验。 我使用角度+素材用户界面,尝试做的是用户更改过滤器,这些更改应反映到网址,例如假设,用户更改了名为" 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这样做的方法吗?

1 个答案:

答案 0 :(得分:0)

我只会在提交时更改网址而不是更改...

使用路由进行此操作的方法是:

$scope.submitSearch = function(query) {
  $state.go('search', {
    'search_term': query
  });
};

设置路线:

$stateProvider
  .state('search', {
    url: '/search/?query',
    controller: 'SearchController',
    templateUrl: 'views/search.html'
});
  • 不要忘记注入$ stateProvider并将ui.router添加到您的项目