我有一个控制器videoCtrl如下:
app.controller('videoCtrl',function($scope,$location){
$scope.location = $location.path();
}); 并在HTML中我有:
<div style="position: relative" ng-controller="videoCtrl">
<p>{{location}}</p>
</div>
当我从名为'/ parts'的路径开始时,它正确地显示了部分。但是当我改变'/ established'的路径时,改变将不会生效,它仍然是'/ parts'。这是正常的吗?
答案 0 :(得分:2)
可以通过几种不同的方式解决此问题。
问题的根源是$location.path()
是一个函数,它返回一个字符串,表示调用函数时的值。不幸的是,当控制器首次初始化时,此功能仅被称为一次。这似乎表示您正在为多个路径使用相同的控制器。
按效率顺序解决问题的可能方法包括:
使用像
这样的观察者$rootScope.on('$locationChangeSuccess', function () {
$scope.location = $location.path();
});
只要成功更改位置,此观察程序就会被触发,并会相应地更新您的值。
使用HTML中绑定的函数
<p>{{getLocation()}}</p>
$scope.getLocation = $location.path;
这将隐式创建一个观察程序,它将触发$location.path()
函数每$digest
个周期。
答案 1 :(得分:1)
您在控制器中设置的位置仅设置一次。如果您希望角度不断观看位置,您需要通过以下函数将其添加到您的html中。
而不是让你的HTML看起来像:
<p>{{location}}</p>
控制器中包含以下js:
$scope.location = $location.path();
试试html:
<p>{{getLocation()}}</p>
和js:
$scope.getLocation = $location.path;
通过评估注入到html中的表达式中的函数,AngularJS将设置一些内容,它们将观察$ scope.getLocation()返回的值,并分别更新DOM。