请有人告诉我我错过了什么或者我遇到这个问题的实际问题是什么。
这是我的控制器。
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.
答案 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
属性。