javascript - AngularJS - 无法将 ngFormController 附加到 $scope

标签 javascript angularjs

我目前正在使用 AngularJS,并且正在尝试让表单验证正常工作。我读到,如果给表单一个 name 属性,那么表单的 ngFormController 将作为属性出现在 $scope 对象上。但我似乎无法让它发挥作用。这是到目前为止我的代码:

<body ng-app="myapp">

<div ng-controller="MyController" >
<form name="myFormNg" ng-submit="myForm.submitTheForm()" novalidate>
   <input type="text" id="name" ng-model="myForm.name" ng-minlength="5" ng-maxlength="12"> Name <br/>

   <select multiple="true"
           ng-model="myForm.car" ng-options="obj.id as obj.name group by obj.type for obj in myForm.options">
       <option value="" >Please choose a car</option>
   </select>

   <input type="submit" value="Submit Form 2">
</form>

</div>

<script>
angular.module("myapp", [])
    .controller("MyController", function($scope, $http) {
        $scope.myForm = {};
        $scope.myForm.name = "Jakob Jenkov";
        $scope.myForm.car  = ["nissan", "toyota"];

        $scope.myForm.options = [
             { id : "nissan", name: "Nissan", type : "4 Door" }
           , { id : "toyota", name: "Toyota", type : "4 Door" }
           , { id : "fiat"  , name: "Fiat"  , type : "2 Door" }
        ];

        for(field in $scope) {
            console.log("   $scope." + field);
        }

        console.log("form: (pristine: " + $scope.myFormNg.$pristine + ", dirty: " + $scope.myFormNg.dirty +
                    ", valid: " + $scope.myFormNg.$valid + ", " + $scope.myFormNg.$invalid + ")");

        $scope.myForm.submitTheForm = function(item, event) {
            console.log("--> Submitting form");
            var dataObject = {
                 name : $scope.myForm.name
                ,car  : $scope.myForm.car
            };

            var responsePromise = $http.post("/angularjs-examples/json-test-data.jsp", dataObject, {});
            responsePromise.success(function(dataFromServer, status, headers, config) {
                console.log(dataFromServer.title);
            });
            responsePromise.error(function(data, status, headers, config) {
                alert("Submitting form failed!");
            });
        }

    } );
</script>

我在 JavaScript 控制台中收到以下错误消息:

“错误:$scope.myFormNg 未定义

最佳答案

您正在尝试在 MyController 实例化期间访问 FormController。但此时 FormController 尚未实例化并绑定(bind)到 $scope。

试试这个:

console.log("form: (pristine: " + $scope.myFormNg.$pristine + ", dirty: " + $scope.myFormNg.dirty +
                    ", valid: " + $scope.myFormNg.$valid + ", " + $scope.myFormNg.$invalid + ")")

在 Controller 方法中 - 例如在您的 SubmitTheForm 函数中。

关于javascript - AngularJS - 无法将 ngFormController 附加到 $scope,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21335102/

相关文章:

javascript - 如何将函数分配给 JavaScript 变量

javascript - 为什么 vue 在 Laravel 中的行为与独立 vue 应用程序不同?

javascript - 有什么办法可以将 Livestamp.js 时间从 '10 minutes ago' 缩短到 '10m ago' 吗?

angularjs - 为什么 ng-include 动态加载的模板的内容不能通过 DOM 选择器获得?

angularjs - Angular ui 布局 - 如何在发生变化时刷新尺寸?

javascript - 使用 Jasmine 和 Chutzpah 对 AngularJs Controller 进行单元测试

Javascript:从输入字段接收数据

javascript - React Hooks,重新渲染并保持相同的状态 - 它是如何工作的?

HTML 中的 JavaScript 多种功能

javascript - AngularJS - Json 到树结构