传递指令范围的属性

时间:2015-06-03 14:43:36

标签: angularjs angularjs-directive

我在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;该指令的参数。

1 个答案:

答案 0 :(得分:0)

好的解决了。我必须在我的指令中添加transclude: true,,创建一个链接函数,然后我执行了以下操作:

scope.value = (eval('scope.$parent.table.'+scope.key) != '' ? eval('scope.$parent.table.'+scope.key) : '');

可能不是最好的方法,但至少它是一种解决方法。