【问题标题】:custom Directive replace element not working自定义指令替换元素不起作用
【发布时间】:2015-11-06 22:26:23
【问题描述】:

我有一个自定义指令,它生成一个带有验证错误的输入,最终在构建输入之后,这是我想知道的部分:

var html= template.get();
 element.html(html);
 $compile(element)(scope);

我还添加了指令对象,我认为这并没有什么不同,因为我在对象中没有模板,还是应该这样做?

replace:true 

但是指令元素 DOM 仍然存在,并且生成的输入被附加为一个孩子,你能帮我吗?

【问题讨论】:

标签: angularjs angularjs-directive angularjs-scope


【解决方案1】:

是的,replacetemplate/templateUrl 结合使用。

对于在link中动态检索的模板,使用

var html= template.get();
element.replaceWith($compile(html)(scope));

请注意,与replace 相比,明显的缺点是指令的属性不会被转换为模板元素,这必须手动完成。

【讨论】:

    【解决方案2】:

    它不起作用,因为您没有提供 template 参数并且您的链接功能是手动添加元素。删除链接功能并像这样添加模板参数,它将起作用。我已经更新了您的 fiddle,它也可以正常工作

    app.directive('test',function($compile){
        return {
            restrict:'E',
            replace:true,
            template:'<input type="text" name="test">'
        }
    });
    

    【讨论】:

    • 我有一个复杂的逻辑来创建模板,并且在创建模板之前我需要调用一些初始化函数,它可以在我的链接代码中工作而不使用模板吗?正如我在问题中提到的那样,我已经知道这部分
    猜你喜欢
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    • 2019-08-15
    • 2017-08-27
    • 2016-12-29
    • 2017-02-07
    相关资源
    最近更新 更多