javascript - 如何使用 form.$addControl()

标签 javascript angularjs

我正在使用 Angular 1.0.8。如何正确添加已编译的表单元素?我认为它与如何使用 $addControl 有关?

考虑这个例子:http://jsfiddle.net/lesouthern/LB4Tx/

在此示例中添加选择后,只有输入“myInput”时表单才有效,它无法识别带有附加选择的“required”指令。

<div ng-app="pageModule"
    ng-controller="parentCtrl">
    <script type="text/ng-template" id="myTemplate">
        <select name="mySelect"
            add-to-form
            ng-model="val"
            required
            ng-options="o.id as o.name for o in options">
            <option value="">Select my option...</option>
        </select>
    </script>
    <form name="myForm"
        id="myForm"
        novalidate
        ng-submit="mySubmit()">
        <input name="myInput"
            ng-model="myInput"
            required />
        <div id="dest"></div>
        <button type="submit">Click me to submit</button>
        {{myForm.$invalid}}
    </form>
    <button ng-click="mkSelect()">create select</button>
</div>



var pageModule = angular.module('pageModule',[])
.controller('parentCtrl',function($scope,$compile) {
    $scope.options = [
        { id : "nissan", name: "Nissan" },
        { id : "toyota", name: "Toyota" },
        { id : "fiat"  , name: "Fiat" },
        { id : "chevy", name: "Chevy" },
        { id : "honda", name: "Honda" },
        { id : "gmc"  , name: "GMC" }
    ];
    $scope.mkSelect = function() {
        var dest = angular.element(document.getElementById('dest')),
            html = angular.element(document.getElementById('myTemplate')).html().trim();
        dest.append($compile(html)($scope));
    }
    $scope.mySubmit = function() {
        console.log('this is my submit');
    }
})
.directive('addToForm',function() {
    return {
        require : ['ngModel'],
        controller : function() {},
        link : function($scope,$element,$attr,$ctrls) {
            var modelCtrl = $ctrls[0];
            $scope.myForm.$addControl(modelCtrl);
        }
    }
});

最佳答案

form.$addControl() 是不必要的。我更正了我的编译命令,附加元素现在正在向表单 Controller 注册:http://jsfiddle.net/lesouthern/8CDNc/

$scope.mkSelect = function() {
        var dest = angular.element(document.getElementById('dest')),
            html = angular.element(document.getElementById('myTemplate')).html().trim();
        $compile(html)($scope,function(_element,_scope) {
            dest.append(_element);
        });
    }

关于javascript - 如何使用 form.$addControl(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22156700/

相关文章:

javascript - C# MVC 站点 - 将 Canvas 保存到服务器上的图像文件 - 图像正在被裁剪

javascript - 如何在新窗口中打开base64 pdf Android PhoneGap

javascript - $digest 错误,没有模型更改

angularjs - 未呈现 Angular UI-Router 嵌套状态模板

angularjs - 如何防止 Firebase 中出现重复的用户属性?

javascript - ng-repeat 不适用于数组

javascript - 获取所有子元素的 ID 及其输入/选择数据

javascript - webpack 如何在项目目录之外的文件上运行 babel-loader?

javascript - Knockout.js:使用 with 绑定(bind)显示可观察的属性。

javascript - AngularJS 和 PHP - 通知 : Undefined property: stdClass