AngularJS $setPristine 与 TypeScript : form is undefined

标签 angularjs validation typescript

当我尝试使用 TypeScript 中的 form.$setPristine 时,它不起作用并且调试显示 form 未定义。根据我的阅读,$scope.formName.$setPristine() 应将表单设置为原始状态。为了从 Controller 访问 $scope.formName,我将它作为 ng.IFormController 属性添加到我的自定义范围接口(interface)中。但是,当我调用 $scope.form.$setPristine() 时,它不起作用,并且调试显示 $scope.form 未定义。

typescript :

interface IMyScope extends ng.IScope {
    employees: Array<IEmployee>;
    employeeToAdd: IEmployee;
    addEmployee(): void;
    form: ng.IFormController;
}

class EmployeeAddController {
    static $inject = ['$scope', 'Employees'];

    constructor(
        $scope: IMyScope,
        $modalInstance: ng.ui.bootstrap.IModalServiceInstance,  
        Employees: IUpdateableResourceClass<IUpdateableResource>
    ) {
        $scope.employees = new Array<IEmployee>();

        $scope.employeeToAdd = {
            Name: '',
            Email: ''
        };

        $scope.addEmployee = function () {
            Employees.save(null, $scope.employeeToAdd, function (employee: IEmployee) {
                $scope.employees.push(employee);
                $scope.employeeToAdd.Email = '';
            $scope.employeeToAdd.Name = '';
                $scope.form.$setPristine(); // $scope.form is undefined
            });
        };
    }
} 

HTML:

<form role="form" class="form-inline" name="form">
    <div class="form-group" ng-class="{ 'has-error': form.name.$dirty && form.name.$invalid }">
        <input type="text" class="form-control" ng-model="employeeToAdd.Name" name="name" required>
    </div>
    <div class="form-group" ng-class="{ 'has-error': form.email.$dirty && form.email.$invalid }">
        <input type="email" class="form-control" ng-model="employeeToAdd.Email" name="email" required>
    </div>
    <button type="button" class="btn btn-default" ng-click="addEmployee()" ng-disabled="form.$invalid">Add</button>
</form>

最佳答案

我在我的表单应用程序中所做的是将表单对象传递给清除它的方法,而不是直接在作用域外工作。

<button data-ng-click="clearAndResetForm(Form)"></button>

$scope.clearAndResetForm = (form:ng.IFormController)=> {
   this.clearAndResetForm(form);
};


private clearAndResetForm(form:ng.IFormController) {
   this.$scope.fieldOne = undefined;
   this.$scope.fieldTwo = undefined;
   form.$setPristine();
}

我不完全确定为什么我的代码可以工作而你的代码不能工作。但希望这种方法可以帮助你。

关于AngularJS $setPristine 与 TypeScript : form is undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23322690/

相关文章:

angularjs - 是否可以使用带有表单搜索查询输入文本的 Angular Controller 通过 Mongoose 在 MongoDB 中进行实时搜索?

javascript - 根据年份范围过滤对象

javascript - 使用 Protractor 检查浏览器控制台中没有错误

javascript - 我可以使用哪些 JavaScript 函数来检查电子邮件和电话号码是否有效,而无需借助 jquery 插件?

javascript - 使用表单时的 Django javascript 问题

angular - Angular 6 中如何仅将一个值从一个组件传递到另一组件?

javascript - Angular : Please turn on my light so I can see

java - 验证两个选择之一

javascript - 在回调中输入事件的正确方法

reactjs - 如何使用 Chart js v3 自定义插件中的选项