我在AngularJS的世界里相当新,现在我遇到了一个我自己无法解决的问题(左手谷歌)。
我已经创建了一个指令,例如:
.directive('customerTableRow', function () {
return {
restrict: 'E',
scope: {
column: '=column',
key: '@key',
label: '@label',
value: '=value'
},
templateUrl: 'path/to/template.html'
}
})
我在这个视图中使用它:
<customer-table-row column="column" key="some_key" label="Some Key" value="table.some_key"></customer-table-row>
我在另一个指令中使用它,在那里我传递&#34;列&#34;和来自数据库的JSON对象,变量&#34; table&#34;,我可以在{{column}}
和{{table.id}}
内部使用。
这是按预期工作的,但我想传递&#34;价值&#34;属性到我的指令,所以它就像value: '=table.key'
。我想修改我的指令,以便我只能传递一次key
,这将被传递到&#34; key&#34; as&#34; @ key&#34;进入&#34;价值&#34;所以它将包含&#34; table.key&#34;值,所以我可以调用我的指令,如:
<customer-table-row column="column" key="some_key" label="Some Key"></customer-table-row>
或相反,如:
<customer-table-row column="column" label="Some Key" value="table.some_key"></customer-table-row>
..而且这个指令会获得&#34; some_key&#34;的索引。来自&#34;价值&#34;属性。
这可以完成吗?如果可以,我应该修改什么?
如果这是一个javascript函数,我会这样做:
var table = {some_key: 'this is table.some_key value'};
function customerTableRow(column, key, label) {
return {
column: column,
key: key,
label: label,
value: eval('table.'+key)
};
}
customerTableRow('some_column', 'some_key', 'Label for row');
哪个输出:
Object {
column: "some_column",
key: "some_key",
label: "Label for row",
value: "this is table.some_key value"
}
修改
&#34;表&#34;在这个value: '=table.key'
中可以进行硬编码,它不需要从父范围或任何花哨的东西继承。如果我能确定&#34;键&#34;一次并使用它来传递&#34; key&#34;和&#34;价值&#34;该指令的参数。
答案 0 :(得分:0)
好的解决了。我必须在我的指令中添加transclude: true,
,创建一个链接函数,然后我执行了以下操作:
scope.value = (eval('scope.$parent.table.'+scope.key) != '' ? eval('scope.$parent.table.'+scope.key) : '');
可能不是最好的方法,但至少它是一种解决方法。