2016-02-26 86 views
0

我有一个指令:角指令范围为空

var ActorDisplayDirective = function() { 
    return { 
     replace : false, 
     restrict : 'AE', 
     scope : { 
      actor : "=" 
     }, 
     templateUrl: staticContext + '/angular-app/templates/actor-display-template.html', 
     link : function(scope, elem, attrs) { 

     }, 

    } 
}; 

这工作正常,在某些地方,而不是其他。这里是我的代码,以显示它在那里不工作:

<p>CAP: {{can_approve_for}}</p> 
    <p> 
Actor display template: 
<span actor-display actor='can_approve_for'></span> 
After template 
    </p> 

CAP: ...显示数据,指令的actor值为null。为什么?我的控制器有:

dataFactory.getCanApproveFor().then(function(data) { 
$scope.can_approve_for = data; 
}); 

所以,我能够看到页面上的值,但指令不显示它。我假设它是一个时间/更新的东西,但是这个指令在ng-repeat的其他地方工作,因为在hte对象已经设置之后,ng-repeat会计算。我如何在这种情况下做到这一点?

+0

是'can_approve_for'原始或对象?也许尝试使用'controllerAs'而不是'$ scope',看看你是否可以这样修复它 – elclanrs

+0

这是一个对象,我不知道'controllerAs'是什么 – mikeb

+1

不鼓励使用'$ scope',''''''''''首选的方式。请参阅https://docs.angularjs.org/api/ng/directive/ngController。但是,你可以发布演示来重现你的问题吗?如果我们可以看到它失败,测试它会更容易 – elclanrs

回答

1

您实际上并没有声明ActorDisplayDirective作为指令。它只是一个简单的函数,返回一个看起来像指令的对象。

你必须告诉角度,这是一个指令,就像这样:

angular.module('someModule', []) 
    .directive('actorDisplay', function() { 
     return { 
      replace: false, 
      restrict: 'AE', 
      scope: { 
       actor: "=" 
      }, 
      templateUrl: staticContext + '/angular-app/templates/actor-display-template.html', 
      link: function (scope, elem, attrs) { 

      }, 
     } 
    }) 
+0

我这样做,它在其他地方工作,并使用相同的方式,除非在ng-repeat循环中 – mikeb

+0

“我这样做”......也许你应该然后发布你的实际代码。否则那些正在帮助你的人只是在黑暗中拍摄并试图解决与你原来的问题无关的问题。 – jakeed1

+0

我有一行'app.directive('actorDisplay',ActorDisplayDirective);'在执行一堆静态init东西的文件中。有几千行代码和40个左右的指令。我发布了相关的并错过了那一个。 – mikeb