无法从函数外部访问$ scope变量...页面加载时分配的数据

时间:2017-02-02 05:54:33

标签: angularjs mean-stack

没有获得价值 $scope.objectives.length .....在页面加载时分配给$scope.objectives的数据.... 它从数据库中获取价值...显示这样的输出

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:0)

http是异步的。这意味着成功或错误执行的代码将在一段时间后。

1)用于http,成功被贬低! https://docs.angularjs.org/api/ng/service/ $ HTTP

2) 完成$http后,调用使用$scope.objective的函数:

$http({
  method: 'GET',
  url: '/getObjective'
}).then(function successCallback(response) {
    console.log("test1"); // this will printed after test2 because http is asynchronus
    $scope.objective = doc ;
    anotherFunction();
}, function errorCallback(response) {

});
console.log("test2");

var anotherFunction = function(){
    console.log($scope.objective.length);
}

3)另一种方法是在$scope.objective

上设置观察者
$scope.$watch('objective', function (newValue, oldValue, scope) {
    console.log(newValue);
});

答案 1 :(得分:0)

  1. '无法读取未定义的属性长度'错误显示由于首先没有初始化$ scope.objectives变量。因此,将其初始化为顶部的空数组[]。
  2. $ http.get()是异步函数。这意味着在成功的HTTP请求之后从服务器返回响应状态后,将获得结果或错误。

    var myApp = angular.module('routingApp');
    myApp.controller('objectiveController', ['$scope', '$http',
    function($scope, $http) {
        $scope.objectives = [];
        $http.get('/getObjective').success(function (doc) {
            $scope.objectives = doc;
    
            //gets the actual length of result array
            console.log($scope.objectives.length);
        }).error(function (error) {
            console.log('error');
        });
    
        //get the result 0
        console.log($scope.objectives.length);
    }]);