【发布时间】:2014-07-22 22:31:31
【问题描述】:
我正在尝试创建一个指令来减少我必须编写的样板代码。
我正在使用 angular xeditable 指令来允许内联编辑,但是当我从我的指令中添加 xeditable 指令属性时,它不起作用。
当我说它不起作用时,我的意思是通常当我单击元素时会出现一个输入框,而现在当我单击元素时什么也没有发生。
Glenn.directive('edit', function() {
return {
restrict: 'A',
template: '{{ content.' + 'ParamData' + '.data }}',
scope: {
ParamData: '@edit'
},
link: function(scope, element, attrs) {
element.attr('editable-text', 'content.' + attrs.edit + '.data');
element.attr('onbeforesave', 'update($data, content.' + attrs.edit +'.id');
}
}
});
所以,我的第一个问题是 xeditable 指令不起作用,因为它在我的内部。我是创建 angularjs 指令的新手,但我想知道它是否与它的编译方式有关?
我的第二个问题是模板。如果我的模板看起来像这样
template: '{{ ParamData }}'
然后它会输出正确的数据,但是如果没有其他部分来引用范围数据,我就无法使其工作。
另外,这是使用指令时的视图
<h2 edit="portrait_description_title"></h2>
如果我不使用指令来减少锅炉代码,这就是它的样子
<h1 editable-text="content.portrait_description_title.data" onbeforesave="update($data, content.portrait_description_title.id)">
{{ content.portrait_description_title.data }}
</h1>
感谢您的建议!
【问题讨论】:
-
您需要阅读范围和嵌入。当您指定
scope: {}时,您正在创建一个新范围,这就是您无法访问父范围的原因。要么不创建子范围,要么像使用 ParamData 一样传入所需的元素。使用嵌入来嵌套指令(例如,类似于 ng-repeat 的工作方式)。 -
要么您需要重新编译代码,要么(如上所述)使用嵌入,编译器将确保处理嵌套指令编译。
标签: javascript angularjs angularjs-directive