AngularJS指令从范围获取值

时间:2014-12-17 22:10:53

标签: angularjs angularjs-directive angularjs-scope

我将我的范围对象传递给我的指令,这很好用!在获取请求后,我使用名为project的属性更新我的范围。这包含一些值,如标题,内容等...如果我记录这一切一切正常,但当我尝试记录scope.project我得到消息undefined,但当我记录范围我看到JSON树中的项目对象......这里会发生什么?

所有控制台日志都显示正确的信息,但我无法访问它...

指令:

.directive('project', ['$http', function ($http) {
    return {
        restrict: 'AEC',
        link: function (scope, element, attrs) {
            console.log(scope); // gives perfect json object including the project object
            console.log(scope.project.content); // gives undefined
        }
    }
}]);    

模板:

<div showcontent id="createdcontent"></div>

controller :(这是我设置范围的地方)

$http.get ('/api/projects/' + id)
    .success (function (data) {
        $scope.project = data.project;
    })
    .error (function (data){
        console.log("error: " + data);
    }); 

非常感谢

1 个答案:

答案 0 :(得分:1)

您正在异步执行某些操作,并且console.log不会等待http.get正在执行的任何异步任务,或者何时返回,因此,在更改项目的值之前正在执行控制台日志,因此它提供了undefined 。将回调添加到您正在使用的$ http方法,然后执行该console.log,或者在请求完成时发送您想要完成的所有操作的回调。我一周前遇到过这个问题,问题是我的console.log在异步方法设置变量之前就已经执行了。例如,在控制器上使用http.get请求,只需添加console.log。

$http.get ('/api/projects/' + id)
    .success (function (data) {
        $scope.project = data.project;
        console.log(scope.project.content);
    })
    .error (function (data){
        console.log("error: " + data);
    });