繁体   English   中英

更新由更改控制器变量的指令创建的元素

[英]Update element created by directive on change of controller variable

我正在尝试创建一个角度应用程序,用户可以在其中创建动态表单。 在此用户可以创建表单字段并保存表单元数据,然后用于显示实际表单。 有实时预览,它使用指令来创建元素。

由于我是 angular 的新手,我无法弄清楚为什么绑定不起作用以及我需要进行哪些更改才能使其工作。 我在这里需要的是,一旦上述数据发生变化,实时预览部分就应该更新。 比如说,我将类型从文本更改为密码,实时预览中的输入框应该变成密码类型。 以下代码是主应用程序的片段。 不幸的是,我无法更改角度版本。

HTML

<form ng-submit="">
    <div ng-repeat="tagfield in tagfields">
        <dynamic-form dataobject="tagfield"></dynamic-form>
    </div>
    <button type="reset">Reset</button>
    <button type="submit">Submit</button>
</form>

脚本

app.directive('dynamicForm', [ '$rootScope', function($rootScope){
    return{
        restrict: 'E',
        scope: {
            dataObject:'=dataobject'
        },
        link: function(scope, element, attrs){
            element.append(
                    'Sample directive ' + scope.dataObject.selectmodel
                    + '<input type='+scope.selectmodel+' 
                       ng-model='+scope.dataObject.idmodel+'>'
            );
        }
    }

}]);

plunker 中的详细代码

https://embed.plnkr.co/7jBm9vxSx3y1hCCwjy1w/

请在plunker中尝试以下代码,让我知道它是否有效

app.directive('dynamicForm', [ '$compile', function($compile){
return{
    restrict: 'E',
    scope: {
        dataObject:'=dataobject'
    },
    link: function(scope, element, attrs){

        var el  ="Sample directive <span>" + scope.dataObject.selectmodel
                + "</span><input type="+scope.dataObject.selectmodel+ "ng-value="+scope.dataObject.idmodel+"/>";
        element.append(el);
        scope.$watch('dataObject.selectmodel',function(newvalue,oldvalue){

        if(oldvalue !=newvalue)
         addelement(newvalue);
        },true)

        function addelement(valuedata)
        {
               element.children().remove()
                var el  ="Sample directive <span>" +             scope.dataObject.selectmodel
                + "<span>"+"<input type='"+valuedata+ "'ng-value='"+scope.dataObject.idmodel+"'/>'";
        element.append($compile(el)(scope));

        }
    }
}

}]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM