我有以下简单的控制器在我的角度应用
vehicleSearchApp.controller('VehicleSearchCtrl', function ($scope, $location){
$scope.location = $location;
$scope.$watch('location.search()', function() {
$scope.target = ($location.search()).target;
}, true);
$scope.changeTarget = function(name) {
$location.search('target', name);
}
console.log($scope.target);
console.log($scope);
}
向控制器的底部的第一个控制台日志语句返回不确定的,但第二个控制台日志语句返回一个对象,如下所示:
我看到'target'属性以及此对象中的其他方法/属性。如果我尝试使用“console.log($ scope.target)”进行打印,为什么我会在控制台中收到“未定义”消息?
如果我将console.log($ scope.target)语句移到console.log($ scope)语句之后,我会得到同样的结果。 console.log($ scope.target)语句是控制器中的最后一行。在这种情况下,我如何访问我的控制器中的变量? –
它是异步设置$ scope.target的值,所以它不会在你移动它的那个块的哪个位置。如果将console.log($ scope.target)移动到$ watch中的$ scope.target =之后,您将看到它的值已记录。所以你确实可以访问它,但是它在你记录它的地方没有价值。当你console.log($ scope)时,你记录了一个对实际对象的引用(当时不是它的快照),所以当你在控制台中看到它时,就是在异步调用$ watch之后。 –