Javascript AngularJS指令绑定链接:无法访问范围变量

Javascript AngularJS指令绑定链接:无法访问范围变量,javascript,angularjs,angularjs-scope,directive,Javascript,Angularjs,Angularjs Scope,Directive,我正试图编写我的第一个AngularJS指令;它基本上是一段代码,从最大数量的星星中脱口而出一些星星(徽章) 指令中的link:function()代码似乎无法访问传入的非静态值的范围变量(尽管模板代码可以) 我需要把链接:代码放在别处吗 html: <span class="badge"><span sa-motes mote-count="character.attributes.stamina.value" mote-max="5" stat-name="characte

我正试图编写我的第一个AngularJS指令;它基本上是一段代码,从最大数量的星星中脱口而出一些星星(徽章)

指令中的link:function()代码似乎无法访问传入的非静态值的范围变量(尽管模板代码可以)

我需要把链接:代码放在别处吗

html:

<span class="badge"><span sa-motes mote-count="character.attributes.stamina.value" mote-max="5" stat-name="character.attributes.stamina.name"></span> </span>

帮助?

如果我理解正确,您会说scope.moteCount在link函数中不可用,应该是。 只要character.attributes.stamina.value具有有效值

看看这个,它只是使用alert来显示moteCount的值

我刚刚用你的密码启动了周围的控制器

$scope.character = {attributes: {stamina: {value: 10, name: 'theName'}}};
更新

由于您正在异步获取传递给指令的值,因此在执行link函数时,这些值可能尚未准备就绪。在链接功能中使用手表,以便在数据准备就绪时收到通知

  scope.$watch('mouteCount',function(newValue, oldValue){
    if(newValue !== oldValue){
      console.log({label:'watch', value: scope.mouteCount});
    }
  });

指令中
link
下的匿名函数的参数是
scope
而不是
$scope
,这是故意的吗?@nicolasccurdy是的,链接函数的参数没有被注入,就像它们是为控制器注入的一样。你有小提琴吗?我的理解是,link:传递了一个特定的作用域,并且不应该使用$scope-我正在从angularjs站点复制示例。除了如果scope变量作为文本传入,例如:mote count=“5”而不是对象计算,例如mote count=“myobject.property”,那么mote count是可用的。character.attributes。。。etc由控制器中的$http(来自本地json文件)加载。正在模板中对其进行评估,但console.log和调试表明,在link:函数中,它是未定义的。如果我将字符串值传递到作用域中(character.attributes.stamina.name,即“stamina”),则在link:function中,它是字符串文字“character.attributes.stamina.name”,但如果我在部分中求值,则它是指令的一部分或模板中它显示了它的价值(即“耐力”)。万岁!就这样!非常感谢!:)后续问题:我是否应该在其他地方这样做,比如在指令的控制器中?或者我可以告诉指令等待数据加载吗?我只是不想在我的代码中到处都这样做……很难对你的问题给出一个一般性的答案。有很多关于这个主题的文章,比如这篇
$scope.getNumber = function(num) {
    return new Array(num);   
}
$scope.character = {attributes: {stamina: {value: 10, name: 'theName'}}};
  scope.$watch('mouteCount',function(newValue, oldValue){
    if(newValue !== oldValue){
      console.log({label:'watch', value: scope.mouteCount});
    }
  });