我有2个函数,一个是由ng-click触发的,一个是由ng-change或$ watch触发的(我试过两个)。
ng-click方法如下所示:
$scope.setGenre = function(x) {
if (genre == x) {
genre = 0;
} else {
genre = x;
}
$location.search().genre = genre;
$scope.getVideos();
};
单击该按钮时,直接在url中将genre参数设置为指定的值。我不需要做范围。$ apply或其他。
ng-change或$ watch方法看起来实际上是相同的:
$scope.$watch('search', function() {
$location.search().search=$scope.search;
$scope.getVideos();
});
但显然该参数未在网址中设置。如果我通过单击运行ng-click功能,则设置搜索参数。
我尝试将$location.search().search=$scope.search;
包装在$ timeout或$ scope.apply中,但问题是摘要总是在运行。
答案 0 :(得分:0)
我找到的解决方案是简单地使用$location.url()
代替$location.search()
。对我来说,使用ng-change或$ watch时,为什么$location.search
的工作方式不同仍然不明确。
这是我的新功能:
$scope.$watch('search', function() {
$location.url('/videos?genre='+genre +"&search="+ $scope.search, false);
$scope.getVideos();
});
只有在我想要编辑$location.url()
函数时才能使用reloadOnSearch:
app.run(['$route', '$rootScope', '$location', function ($route, $rootScope, $location) {
var original = $location.url;
$location.url = function (url, reload) {
if (reload === false) {
var lastRoute = $route.current;
var un = $rootScope.$on('$locationChangeSuccess', function () {
$route.current = lastRoute;
un();
});
}
return original.apply($location, [url]);
};
}]);
这让我传递一个布尔参数,这样我就可以动态地使用reloadOnSearch。