AngularJS - 根据URL更新模型

11
这基本上是对这个问题的跟进:AngularJS - 如何在生成templateUrl时使用$routeParams?请参考那里的代码,了解此问题的正确上下文。
所有导航部分都运行良好,但现在当我导航时,我想基于primaryNavsecondaryNav更新我的$scope中的一些属性。 我认为我可以使用$watch做一些事情,但似乎无法使任何内容工作。 这是我尝试过的几件事:
$scope.$watch($location.path(), function() {...}); //result in js error
$scope.$watch($location, function() {...}); //function runs once on page load, but not after that
$scope.$watch($window.location, function() {...}); //function runs once on page load, but not after that
$scope.$watch(window.location, function() {...}); //function runs once on page load, but not after that
$scope.$watch(window.location.href, function() {...}); //results in js error

我可以在我的控制器中创建一些方法,以便获取这些导航并更新所有内容,然后导航到其他页面,并为所有的标签添加ng-click。但是,AngularJS最让我喜欢的一点是能够使用真实的URL格式值作为href(例如:<a href="#/priNav/secNav">Foo</a>)。 当我通过路由进行页面跳转时,是否不可能根据更改的URL更新我的模型,而无需经过控制器上的某些方法?我希望我的问题表达得清楚。

1个回答

33
 $scope.$watch(function() {
    return $location.path();
 }, function(){
    ...
 });

你应该传递一个函数或者一个可以在该作用域内计算的字符串


啊...我忘记了要观察一个函数。我一直在尝试字符串。$scope.$watch($location.path, function(){}); 不起作用,但是 $scope.$watch(function() { return $location.path() }, function(){...}); 起作用了。谢谢! - dnc253
2
谢谢!它甚至适用于$location.search - Anatoly Mironov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接