如何使用 TypeScript 访问 Angular 的 $scope.formName.$dirty 布尔值?

Posted

技术标签:

【中文标题】如何使用 TypeScript 访问 Angular 的 $scope.formName.$dirty 布尔值?【英文标题】:How do I access angular's $scope.formName.$dirty boolean with TypeScript?如何使用 TypeScript 访问 Angular 的 $scope.formName.$dirty 布尔值? 【发布时间】:2017-10-10 21:46:08 【问题描述】:

我有一个带有 name 属性的表单,我正在尝试使用 angular 的 $scope 变量来访问表单,以及它的 $dirty 布尔值。

问题是我正在使用 TypeScript,如果我将 $scope 变量的类型设置为来自definitelyTyped 的类型文件的接口ng.IScopeng.IFormController 之一,我无法输入类似

$scope.myFormINeedToAccess.$dirty

因为一切都是强类型的,如果我这样做了,我会得到错误,

Property 'myFormINeedToAccess' does not exist on type 'IScope'.

Property 'myFormINeedToAccess' does not exist on type 'IFormController'.

因为我同时被介绍给 AngularJS 和 TS,所以我没有在 javascript 中编写任何角度,但据我所知,$scope 变量(如果变量是正确的词的话)是全球可访问。因此,在任何级别的封装中,您都可以删除

$scope.(tons of options/stuff in the current view).(a bunch of additional options)

但我感觉很受限制,只能说

$scope.(15ish options defined by ng.IScope or ng.IFormController)

如何使用$scope: ng.IScope$scope: ng.IFormController 以使我可以通过语句成功访问$dirty 布尔值,

$scope.myFormINeedToAccess.$dirty

【问题讨论】:

【参考方案1】:

1) 不要在 Typescript 中使用 $scope - 使用 controller as 语法。 2) 在控制器中创建ng.IFormController 类型的公共变量。 3) 将表单的name 设置为#2 中创建的变量。

html

<div ng-controller="MyController as vm">
    <form name="vm.myForm">
        // form elements here
    </form>
</div>

控制器:

export class MyController() 
    public myForm: ng.IFormController;

    public someFunction(): void 
        if(this.myForm.$dirty) 
            // do something
        
    

我显然遗漏了相当多的管道代码,但这应该会给你大致的要点。

【讨论】:

天哪,非常感谢!这完全奏效了!我已经用头撞墙至少一个小时了,非常感谢!为什么它匹配这些名称,并在表单标签上的名称 attr 中使用 controllerAs 前缀使这些东西同步?这在某些角度文档中的某处有解释吗? 很高兴它有帮助! Angular 在绑定到表单和表单元素时使用name 属性。当我刚开始的时候,这个问题也让我困惑了很长一段时间:如果你需要访问单个表单元素,你必须创建一个界面,因为 Typescript 对表单元素本身一无所知。跨度>

以上是关于如何使用 TypeScript 访问 Angular 的 $scope.formName.$dirty 布尔值?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Typescript 时如何在 NativeScript 中访问 Native api

在 typescript / angular2 环境和后端的 nodejs 中设置持久会话时遇到问题

反应原生 |如何使用 Typescript 访问键盘的 endCoordinates 并重新组合

如何使用 get 方法访问 Typescript 中对象的字段?

如何使用 TypeScript 访问 Angular 的 $scope.formName.$dirty 布尔值?

如何使用 TypeScript 以类型安全的方式访问 React 子元素道具?