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

时间:2017-12-29 06:27:52

标签: javascript angularjs angular-factory

请有人告诉我我错过了什么或者我遇到这个问题的实际问题是什么。

这是我的控制器。

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.

1 个答案:

答案 0 :(得分:1)

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

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

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

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

然后你在工厂调用那些方法获取数据,同时获取这些数据,执行以下代码

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)

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

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