我的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()?