【发布时间】:2013-02-12 04:29:39
【问题描述】:
我的 routeProvider 路由的 reloadOnSearch 设置为 false :
$routeProvider
.when(
"/film/list",
{
templateUrl: '/film/list.html',
controller: FilmListController,
reloadOnSearch: false
}
....
)
我这样做是因为我不希望在查询字符串更改后重新加载整个控制器,但我仍然使用它并且 url 看起来像这样:film/list?sort=isbn&order=asc&offset=0。现在,每当查询字符串更改时,我想从我的控制器调用一个函数。于是我尝试在控制器中设置一个$watch:
$scope.location = $location;
$scope.$watch( 'location.search()', function( search) {
$scope.list();
});
但这不起作用。如果我设置 $watch 来观察查询字符串的单个参数的变化,那么它就可以工作。但我不想为查询字符串的每个参数设置 $watch。我现在使用的解决方案是这样的:
$scope.location = $location;
$scope.$watch( 'location.url()', function( url ) {
if($location.path() == '/film/list')
$scope.list();
});
因此,我不关注搜索,而是关注整个 url,然后检查路径是否是我在 routeProvider 中设置的路径以有条件地调用该函数。我不喜欢这个解决方案的地方是我必须明确键入要匹配的 $location.path 的值。
谁能提出一个更好的解决方案,或许可以解释一下为什么 $watch 对 $location.search() 不起作用?
【问题讨论】:
-
尝试将 location.search() 包装在一个函数中。请参阅stackoverflow.com/questions/13465690/… 了解更多信息。
-
进行深度观察。将 true 作为 3. 参数添加到手表。