无法访问同一控制器中的范围:AngularJS

Unable to access scope in same controller : AngularJS

请任何人告诉我我遗漏了什么或者我面临这个问题的实际问题是什么。

这是我的控制器。

app.controller('UpdateLeadController', ['$scope', '$http', '$location', '$route', 'ProgramsFactory', 'CommonFactory', '$filter', 'ProcessFactory', 'Upload', '$routeParams', function($scope, $http, $location, $route, ProgramsFactory, CommonFactory, $filter, ProcessFactory, Upload, $routeParams) {
 $scope.limit = 3;
$scope.loadMore = function() {
    $scope.limit += 2;
}
$scope.programIs = 1;

ProgramsFactory.Getprogramslist(1).then(function(response) {
    $scope.programs = response.data.data;
});
CommonFactory.Getclients().then(function(response) {
    $scope.clients = response.data.data;
});
ProgramsFactory.Getmonths().then(function(response) {
    $scope.months = response.data.data;
});

ProcessFactory.Getlead($routeParams.id).then(function(response){
    $scope.lead = response.data.data; // here i've got the lead data from factory.
});
console.log($scope); // when i am printing this scope i am getting the object lead with all data.
console.log($scope.lead); // when i am trying to print this. it outputs as `Undefined`.
}]);

我坚持这个问题。所有数据都可以在 HTML 中访问,但无法在控制器和指令中获取它们。一个指令也给出了未定义的数据。

while printing scope i can see the object. but when i am trying to access that object it showing it's undefined.

让我们看看 javascript 是如何工作的

首先你创建了一个范围 3 属性

* 请注意 $scope.programs$scope.clients$scope.months 未定义 *

$scope.limit = 3;
$scope.loadMore = function() {
    $scope.limit += 2;
}
$scope.programIs = 1;

然后调用factory中的那些方法来获取数据,在获取这些数据的同时,执行下面的代码

console.log($scope);// u got an object 
console.log($scope.lead); // u got an undefined, of course u never set it

几秒钟后,您的一个请求完成 我们以Getlead为例,现在执行下面的代码

$scope.lead = response.data.data; 

这是你得到$scope.lead

的时间

但是为什么

console.log($scope)

获取数据后是否显示所有内容?

您是否注意到控制台中有一个 'info' 图标?它说 the value is evaluated now... 或类似的东西。这意味着当您第一次登录 $scope 时,它没有 lead 属性,但是当获取过程完成并且您单击并展开日志数据时,chrome将 reevaluate 值根据其当前值,所以你看到 $scope.lead 属性.