Javascript 数据提取前执行的角度指令

Javascript 数据提取前执行的角度指令,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我现在有一个关于指令的问题,而当指令试图访问它们时,在父控制器中设置的一些范围值没有设置。这是因为在AJAX调用返回任何数据之前调用了该指令。是否有任何方法使我的指令在继续之前等待设置此数据 angular.module('vt.directives', []) .directive('personType', [function () { return { restrict: 'A', replace: true, scope:

我现在有一个关于指令的问题,而当指令试图访问它们时,在父控制器中设置的一些范围值没有设置。这是因为在AJAX调用返回任何数据之前调用了该指令。是否有任何方法使我的指令在继续之前等待设置此数据

angular.module('vt.directives', [])
    .directive('personType', [function () {
    return {
        restrict: 'A',
        replace: true,
        scope: {
            data: '='
        },
        template: '<div class="{{data.property}}"</div>',
        link: function (scope, elm, attrs) {
            console.log(scope.personType);

        }
    };
}]);

<div ng-controller="parentcontroller">
  <div personType data="jsonobject"></div>
</div>
角度模块('vt.directives',[]) .directive('personType',[function(){ 返回{ 限制:“A”, 替换:正确, 范围:{ 数据:'=' },
模板:'如果希望数据位于作用域personType,则必须将数据分配给personType指令本身

<div personType="jsonobject"></div>
如果您想在AJAX调用之后加载这些数据,那么您可以$emit从您的服务中发送数据,并通过$on方法在指令中访问它


在您的情况下可能会有所帮助:)

如果不等待会有什么危害?我认为数据在
范围内可用。数据在
范围内不可用。personType在您的指令链接函数中。当您执行
范围时:{data:'='}
在该指令中,您正在设置双向绑定,因此正如第一条注释所述,如果不等待,则不会有任何伤害,b/c检索数据时,绑定应再次更新。您的console.log语句将只运行一次(即使使用了正确的变量名,它也不会打印服务器响应)。您是否向我们展示了使用该指令的所有模板?如果有更多模板,您可能正在创建可能导致此类问题的子作用域。此外,您应该使用
人员类型
从HTML中调用您的指令。请在指令中使用$watch。
console.log( $parse(attrs.personType)(scope));