【问题标题】:Dynamic variable name directive attribute动态变量名指令属性
【发布时间】:2014-03-11 03:44:27
【问题描述】:

我有一个 my-edit 指令,它有一个 value 属性,期望绑定一个作用域变量。

<my-edit value="myVar"></my-edit>

有没有办法做这样的事情:

<my-edit value="{{varName}}"></my-edit>

其中 varName = "myVar"

我想将此指令嵌套在具有“text-field”属性的“my-listbox”指令中

<my-listbox ng-model="myList" text-field="itemProp"></my-listbox>

所以我尝试使用如下模板:

<div>
    <ul>
        <li ng-repeat="item in items">
            <my-edit value="item.{{textField}}"></my-edit>          
        </li>
    </ul>
</div>

但显然它不起作用

我想使用文本绑定也不是解决方案。

“my-listbox”的动态生成模板是否适合?

我在 compile 函数中尝试过,但由于嵌套的 neRepeat 指令,效果不佳。是否应该通过在链接函数中使用 $compile 来完成?

谢谢

【问题讨论】:

  • 如果我明白的话;这不是答案吗:value="item.textField"
  • item 是绑定到父指令的 items 集合中的对象。 textField 是一个字符串属性,指定要使用的项目对象属性名称(在这种情况下显示)是指令。 item 没有 textField 属性
  • 在这种情况下;我不明白你在问什么。也许你应该把 Plunker 样本放在一起。

标签: angularjs angularjs-directive


【解决方案1】:

这对于 Angular 来说非常酷,它评估了您传递给指令的字符串。这意味着您实际上只需执行value="item[textField]" 即可。

例如,如果您有一个带有如下数据的控制器:

$scope.data = {
    test: 'test_val',
    other: 'other_val'
};
$scope.val = 'test';

你可以像这样将它传递给你的指令:

<directive value="data[val]"></directive>

就是这样设置的:

scope: {
    value: '='
},

并且隔离范围将具有 scope.value = 'test_val' 并且只需将原始控制器 val 更改为 'other' 即可更新为 'other_val'

我创建了一个fiddle,供你玩。

希望这会有所帮助!

【讨论】:

  • 当然……应该更清楚。谢谢哈萨辛。我可以删除帖子吗?有点尴尬:)
  • 如果你真的想要,我无法阻止你,尽管我确实认为很多很多人最终都会遇到同样的问题。
  • 真正有趣的是如何在根级别访问动态命名的变量。数组符号在那里没用:)
  • 排序不同的问题,因为该指令正在评估它自己的范围,我想正在寻找外部控制器直接具有像 $scope.test 和 $scope.other 。但是,是的,听起来很有趣。如果你有一个用例,你应该把它作为一个问题来问:)
猜你喜欢
  • 2015-10-05
  • 1970-01-01
  • 2019-11-09
  • 2016-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多