Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs ng attr未对指令元素求值_Angularjs_Coffeescript - Fatal编程技术网

Angularjs ng attr未对指令元素求值

Angularjs ng attr未对指令元素求值,angularjs,coffeescript,Angularjs,Coffeescript,我正试图使用元素属性将数据从控制器传递到隔离范围。以下是视图中的我的标记: 问题是cid被分配了“{question.id}}”,而不是question.id的值。我试图使用ng attr cid=“question.id”,但这也不起作用。最重要的是,ctype被评估为未定义 如果我在任何其他元素上添加ng attr cid,它将计算并向元素添加cid=“” 有人能解释一下我遗漏了什么吗?在一个独立的作用域中(当您在指令上指定一个作用域对象时得到的),您可以根据原始元素的属性将变量导入到作用

我正试图使用元素属性将数据从控制器传递到隔离范围。以下是视图中的我的标记:

问题是cid被分配了“{question.id}}”,而不是question.id的值。我试图使用ng attr cid=“question.id”,但这也不起作用。最重要的是,ctype被评估为未定义

如果我在任何其他元素上添加ng attr cid,它将计算并向元素添加cid=“”

有人能解释一下我遗漏了什么吗?

在一个独立的作用域中(当您在指令上指定一个作用域对象时得到的),您可以根据原始元素的属性将变量导入到作用域中

在这种情况下,不需要使用
ng attr
,因为我们的指令将处理获取值的操作

  • “=”
    用于复制变量,因此只需提供变量名称,例如
    cid=“question.id”
  • “@”
    用于在将变量传递到指令之前插入变量,例如
    cid=“{{question.id}}”
    。对于传递原始字符串也非常方便
总之

  • 放下
    ng属性
  • 将指令
    scope.cid
    更改为
    “@”
    或在HTML中使用
    cid=“question.id”
  • 检查
    questions
    的值(不确定这是否是故意多元化的,因为指令中未定义
    ctype
    ,这意味着
    questions
    也未定义

下面是一个。

不完全清楚为什么您需要在cid属性上使用ng attr前缀,但如果您确实需要这样做,那么不幸的是,您的“cid”隔离范围值干扰了angular如何处理ng attr-*的一些实现细节

您可以在指令中使用一个link函数来解决这个问题,该函数观察ng attr cid将创建的“cid”属性,并删除隔离作用域定义中现有的
cid:'='
属性

... your existing directive definition ...
link: function link(scope, elem, attrs) {
  attrs.$observe('cid', function(val) {
    scope['cid'] = val;
  });
}
... etc, etc ...
这将在
cid
属性上设置一个观察者,并随时更新范围

... your existing directive definition ...
link: function link(scope, elem, attrs) {
  attrs.$observe('cid', function(val) {
    scope['cid'] = val;
  });
}
... etc, etc ...