我知道这可能是一个非常基本的问题,但我无法在任何地方找到任何令人满意的答案。
我想在我的控制器中观察$ location.path()并相应地更新id。我的代码看起来像这样。
$scope.activeListId = $location.path().slice(1);
它不起作用并更新activeListId但是如果我使用$ watch它可以无缝地工作而不是绑定直接属性
$scope.$watch(function() {
return $location.path();
}, function(value) {
$scope.activeListId = value.slice(1);
})
有人可以解释上面两个有什么不同吗?在我的理解中他们都是一样的。
答案 0 :(得分:2)
第一个陈述只是当时的一项任务。您必须注意更新才能更新activityListId
。更改跟踪仅针对使用监视在范围内定义的元素发生。
这些监视可以使用绑定到范围的表达式或返回值的函数。当angular运行一个摘要周期(一个基本的脏检查周期,其中Angular将正在观察的当前值与其旧值进行比较)时,它会评估您的函数$location.path()
的变化。如果发现任何更改,则会触发监视,您可以在其中设置activeListId
。
在视图中使用表达式时,Angular会在内部设置监视这些表达式。
您可以详细了解摘要周期here。