and*_*avt 0 javascript angularjs angularjs-directive
我创建了一个如下所示的指令:
app.directive('superDir', function ()
{
function link(scope, element, attrs) {
scope.$watch('elements', function (value, old)
{
element.replaceWith(scope.elements.join(""))
},true);
}
return {
link: link
};
});
Run Code Online (Sandbox Code Playgroud)
然而,elements数组被修改并被$watch触发我收到一个异常:
Cannot read property 'replaceChild' of null
Run Code Online (Sandbox Code Playgroud)
html看起来像这样:
<body ng-app="myApp">
<div ng-controller="MainCtrl">
<super-dir></super-dir>
</div>
Run Code Online (Sandbox Code Playgroud)
你能告诉我为什么不能更换super-dir标签吗?
谢谢
我知道这有点晚了,但我现在忙着解决同样的问题,我调查了这个问题.
我假设,您想要实现的是在运行时动态加载和切换模板.
你的错误的原因replaceWith()调用在于内部使用的.find()方法和原则,你(就像我)正在做它 错了,用错意,而不是角的方式.
您正在尝试替换定义该指令的元素.你能想象的元素BEING指令(如果你把水倒入茶壶......).
这可以在link函数中完成,但是在设置了指令和DOM的一部分之后,你可以通过替换它来从DOM中删除指令本身,这与Angular的选择器的工作方式不相符.
那么你可以做什么,而我现在正在做的是......只需更换它的内容!
var renderTemplate = function (scope, element, template) {
var loader = Pages.getTemplate(template, false);
var promise = loader
.success(function(html) {
var rendered = $compile(html)(scope);
element.empty();
element.append(rendered);
});
};
Run Code Online (Sandbox Code Playgroud)
因此,您的指令要么具有在标准模板中替换它的包装元素,要么不替换所有元素.无论哪种方式,替换指令的内容而不是指令本身,它应该正常工作!
变得像水一样,我的朋友.
| 归档时间: |
|
| 查看次数: |
1931 次 |
| 最近记录: |