Angular的$scope和$watch混淆了
Angular $scope confusion with $watch
我的Angular 1.0之旅还在起步阶段。我正在学着喜欢它,但有几个地方我还是摸不着头脑。
最近,我在使用$watch时遇到了一些让我困惑的事情。看一下:
$scope.$watch('cookies', function() {
if ($cookies.getAll().redditSession) {
$scope.$emit('cookiesChanged')
// $scope.userWelcome = cookieService.decodeCookie($cookies.get('redditSession'))
}
})
$scope.$on('cookiesChanged', function() {
$scope.userWelcome = cookieService.decodeCookie($cookies.get('redditSession'))
})
这段代码可以工作。如果我的cookie发生了变化,我就会发出一个事件,从而触发事件侦听器,从而改变$scope的值。欢迎访问存储在cookie中的一些值。如果我在应用程序中导航到另一条路由,我就会看到这个变化。
然而,我想知道为什么我必须在这里使用事件发射器?注意我注释掉的那一行。我先试了一下,但它没有改变$scope的值。userWelcome,即使我移动到应用程序的另一个页面,我也必须重新加载页面才能看到我登录了。
这是怎么回事?
尝试直接观看cookie:
$scope.$watch(
function () {
return $cookies.get('redditSession');
},
function (newValue) {
if (newValue) {
$scope.userWelcome = cookieService.decodeCookie(newValue);
};
}
);
您的错误在于您试图使用标准方法获得新值。获得新值的方法是将其添加到函数的参数中。是这样的:
$scope.$watch('cookies', function(newValue, oldValue) {
if (newValue.getAll().redditSession) {
$scope.userWelcome = cookieService.decodeCookie(newValue.get('redditSession'))
}
// also try this
console.log(oldvalue === $cookies);
});
干杯!
相关文章:
- 强制 $scope.$watch 只开火一次
- $scope变量发生更改时未触发Angular$watch
- 为什么AngularJS$scope.watch()在我告诉它监视数组时会停止工作
- $location.search() - 如何在 $scope.$watch 函数中使用作用域中的参数
- 了解窗口调整大小事件与 scope.$apply 与函数$watch
- 没有$scope.digest,$watch不会触发
- 仅在focusout字段之后调用$scope.watch函数
- $scope变量未定义,尽管它是在$watch函数内部设置的
- 使用不带$scope的$watch(作为语法的控制器)
- $scope.$watch(var,function) undefined 不是函数
- 不断在 $scope.$watch 函数中收到“类型错误:无法读取 null 的属性'值'”
- 对 angular.extend 的调用不会导致 $scope.$watch proc
- $scope.$watch 使用棱角材料
- AngularJS:$scope.$watch 不会更新从自定义指令$resource获取的值
- 在指令中使用 $scope.$watch 处理未定义变量的替代方法
- 如何在 Angular 1.5 组件中等待绑定(没有 $scope.$watch)
- Scope.watch 在指令中调用在开头 angularjs
- Angular 不会保存 $scope.$watch 顺序
- 如何控制$scope.$watch迭代
- 当我将$scope分配给另一个变量并更改新变量上的监视值时,不会触发角度 $scope.$watch