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

How do I access angular's $scope.{{formName}}.$dirty boolean with TypeScript?

我有一个带有名称属性的表单,我正在尝试使用 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中写任何angular,但据我所知我理解$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) 不要在 Typescript 中使用 $scope - 使用 controller as 语法。
2) 在你的控制器中创建一个 public 类型 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
        }
    }
}

我显然遗漏了相当多的管道代码,但这应该为您提供了一般要点。