【问题标题】:$setPristine() not working in angular material form$setPristine() 不能以角材料形式工作
【发布时间】:2016-02-06 01:17:40
【问题描述】:

我正在用角材料制作一个简单的表格来添加帖子,我还有一个取消按钮来清除表格。我尝试使用 $setPristine() 但在调用 clearForm 函数后输入字段仍然显示红色。我在这里遵循了一些答案,但这并没有解决我的问题。 这是我的 index.html 和 app.js

<form id="addForm" name="myForm">
                <fieldset id="addField">
                    <legend id="addFormLegend">Create Post</legend>
                    <md-input-container class="md-block">

                        <md-icon md-svg-src="name.svg"></md-icon>
                        <input ng-model="post.name" type="text" placeholder="Name" ng-required="true">
                    </md-input-container>
                    <md-input-container class="md-block">

                        <md-icon md-svg-src="desc.svg"></md-icon>
                        <input ng-model="post.desc" type="text" placeholder="Description" ng-required="true">
                    </md-input-container>
                    <md-input-container class="md-block">

                        <md-icon md-svg-src="link.svg"></md-icon>
                        <input ng-model="post.url" type="url" placeholder="Url " ng-required="true">
                    </md-input-container>
                    <md-button ng-click="clearForm()" class="md-raised md-primary" id="cancelButton"> Cancel </md-button>
                    <md-button ng-click="createPost(post)" class="md-raised md-primary" ng-disabled="myForm.$invalid" id="addButton"> Add Post </md-button>
                </fieldset>

            </form>

app.controller('mainCtrl', ['$scope', '$firebaseArray', 'posts', function ($scope, $firebaseArray, posts) {
        $scope.posts = posts;
        $scope.showForm = false;
        var defaultForm = {
            name: "",
            desc: "",
            url: ""
        };
        $scope.demo = {};
        $scope.post = angular.copy(defaultForm);

        $scope.createPost = function (post) {
            $scope.posts.$add({
                name: post.name,
                desc: post.desc,
                url: post.url
            });
            $scope.post = {};
        };
        $scope.showAddForm = function () {
            $scope.showForm = true;
        };
        $scope.clearForm = function () {
            // $scope.showForm = false;
            $scope.myForm.$setPristine();
            $scope.post = angular.copy(defaultForm);
            console.log('empty');


        }
    }]);

【问题讨论】:

  • 你使用的是哪个版本的 angularjJS?

标签: angularjs angular-material


【解决方案1】:

实际上我经历了很多答案,但没有一个有效。然后我确实在我的 app.js 中添加了这些行

 $scope.clearForm = function () {
            $scope.showForm = false;
            $scope.myForm.$setPristine();
            $scope.myForm.$setUntouched();
            $scope.post = {};
 }

所以基本上在 $setPristine() 为我工作之后添加 $scope.myForm.$setUntouched();

【讨论】:

    【解决方案2】:

    尝试在控制器的范围内创建一个属性,例如$scope.form = null;,然后将表单名称更改为form.myForm。然后你应该可以从控制器调用$scope.form.myForm.$setPrestine()

    这是因为表单创建了自己的范围,而不是直接添加到控制器范围。

    但是现在您正在创建一个属性form,表单控制器被分配到该属性,它又可以从控制器依次访问。

    【讨论】:

    • 我试过了,我在这里经历了很多答案,但验证仍在进行中
    • 你能提供一个 jsFiddle 或类似的吗?
    • 我解决了,几分钟前,我所做的是应用所有表单属性并检查输出,应用 $scope.myForm.$setUntouched();在 $scope.myForm.$setPristine() 之后;为我工作
    • 没问题。啊,这是有道理的.. :)
    猜你喜欢
    • 1970-01-01
    • 2020-01-07
    • 2018-10-06
    • 2018-05-26
    • 2017-08-27
    • 2020-08-07
    • 2022-11-17
    • 2021-12-13
    • 2018-06-25
    相关资源
    最近更新 更多