更改控制器变量

时间:2017-02-07 14:01:32

标签: javascript angularjs angularjs-directive angularjs-scope angularjs-ng-repeat

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

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

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/

1 个答案:

答案 0 :(得分:1)

请在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));

        }
    }
}

}]);