在角度指令中,不需要来自控制器的功能

时间:2015-09-03 13:05:44

标签: javascript angularjs forms

家伙! 我从动态数据构建表单。在将来,我需要编译此表单,将数据放入表单并提交。我通过这种方式建立形式:

<div>
<form name="pageForm">
<div>
<div class="form-group" ng-repeat="item in formStructure.form_data"
dynamic="item" templates="templates"></div>
</div>
</form>
</div>

我在js代码中有表单部件/输入的模板,如下所示:

$scope.templates.checkbox = '<label><input ng-required="item.conf.required"' + 
'ng-model="formData[item.conf.name]" type="checkbox" > {{item.conf.title}} </label>';

并使用这样的指令:

function dynamic ($compile) {
    return {
        restrict: 'A',
        replace: true,
        scope: { dynamic: '=dynamic',
            templates: '=templates',
            eventlstn: '&'
        },
        link: function postLink(scope, ele, attrs) {
            scope.$watch( 'dynamic' , function(html){
                scope.item = html;
                ele.html(scope.templates[html.type]);
                $compile(ele.contents())(scope);
            });
        }
    };
}

在表单被填充之后,当我点击一些元素时,用ng-click =&#34; someFunctionINController()&#34;什么都没有。

同样在我的HTML上,我无法使用ng-model访问表单数据。

plunker

1 个答案:

答案 0 :(得分:0)

我找到了解决方案: 我修改了指令:

function dynamic ($compile) {
    return {
        restrict: 'AE',
        replace: true,
        scope: false,
        link: function postLink(scope, ele, attrs) {
            scope.$watch( 'dynamic' , function(){
                ele.html(scope.templates[scope.item.type]);
                $compile(ele.contents())(scope);
            });
        }
    };
}

使用scope: false指令与控制器使用相同的范围。 现在它有效。谢谢,Grundy为你的时间。

将来我计划将这个解决方案(拖动&#39; n&#39; Drop表单构建器具有扩展功能)公开,希望它能帮助某人。