我想保留控制器的实例而不重新加载。我将reloadOnSearch
设置为false,我在控制器中管理路由更改。这是代码。
这是我的链接<a href="products/page/2">next</a>
的示例。我已经定义了以下模块。
angular.module('app.products', ['ngRoute', 'ngResource'])
.config(['$routeProvider', function ($routeProvider) {
$routeProvider
.when('/:section/:view/:number', {
templateUrl: 'tpl/table.html',
controller: 'ProductsCtrl',
controllerAs: 'productsCtrl',
reloadOnSearch: false
});
}])
.controller('ProductsCtrl', ['$scope', '$routeParams', '$location', ProductsCtrl]);
控制器的
function ProductsCtrl($scope, $routeParams, $location) {
$scope.$on('$routeUpdate', function () {
console.log("routeUpdate");
});
}
但是控制器不会对更改的路由做出响应,并且文本不会写入控制台输出。
答案 0 :(得分:5)
在角度行话中,“搜索”仅指URL的查询字符串参数部分。例如:?key=value&page=42
“路径”是指没有该查询字符串的URL。这里/products/page/2
是一条路径。
设置reloadOnSearch: false
时,如果仅,查询字符串参数发生变化,则表示您不会重新加载视图和关联的控制器。
/products/page/2
导航到/products/page/3
,则视图仍会重新加载。没有$routeUpdate
将被解雇,因为没有必要。当再次调用控制器初始化函数时,您将从$routeParams
获取新参数。/products?page=2
导航到/products?page=3
时。然后,将不会重新加载视图,并且将广播$routeUpdate
。所以这里的解决方案是将page
定义为查询字符串参数而不是路径参数:
angular.module('app.products', ['ngRoute', 'ngResource'])
.config(['$routeProvider', function ($routeProvider) {
$routeProvider
.when('/:section', {
templateUrl: 'tpl/table.html',
controller: 'ProductsCtrl',
controllerAs: 'productsCtrl',
reloadOnSearch: false
});
}])
.controller('ProductsCtrl', ['$scope', '$routeParams', '$location', ProductsCtrl]);
控制器:
function ProductsCtrl($scope, $routeParams, $location) {
$scope.setupView = function setupView(section, page) {
// Setup you view here
// ...
};
$scope.$on('$routeUpdate', function () {
// This is called when only the query parameters change. E.g.: ?page=2
$scope.setupView($routeParams.section, $routeParams.page)
});
// This one is called when the the path changes and the view is reloaded.
$scope.setupView($routeParams.section, $routeParams.page)
}
答案 1 :(得分:1)
而不是$ routeUpdate,尝试使用$ routeChangeSuccess。
$scope.$on('$routeChangeSuccess', function (scope, next, current) {
console.log("Your text goes here.");
});
您可以使用next和current来检查上一个和下一个路线。 希望它有所帮助。