angularjs - 如何将我的 javascript AngularJS 应用程序 Controller 转换为使用 Typescript?

标签 angularjs typescript

我已经添加了 AngularJS 定义。目前我的应用 Controller 看起来像这样:

app.controller('appController',
    [
        '$scope',
        '$state',
        'utilityService',
        appController
    ]);

function appController(
    $scope: ng.IScope,
    $state,
    utilityService
    ) {

    var app = this;

    $scope.broadcast = function (val) {
        $scope.$broadcast('broadcast', val);
    };

    if (app.auth.user.isAuthenticated()) {
        app.state.text = null;
        $state.transitionTo('home.content', { content: 'overview' });
    } else {
        $state.transitionTo('authentication');
        // app.auth.loginData = app.cache.get('loginData');
        app.state.text = "Please Login ...";
    }

} 

如果我想充分利用 TS,是否应该转换为一个类?如果是,我该如何处理广播函数等函数的定义?

最佳答案

原理是这样的

app.controller('appController', AppController);

interface AppControllerScope extends ng.IScope{
    vm: AppController; 
}

class AppController{

    text: string;

    static $inject=[
        '$scope',
        '$state',
        'utilityService'
    ]
    constructor(
    public $scope: AppControllerScope,
    public $state,
    public utilityService: UtilityService
    ) {
        $scope.vm = this; 

        // NOTE: unclear what app is, perhaps its a service?
        if (app.auth.user.isAuthenticated()) {
            this.text = null;
            $state.transitionTo('home.content', { content: 'overview' });
        } else {
            $state.transitionTo('authentication');
            // app.auth.loginData = app.cache.get('loginData');
            this.text = "Please Login ...";
        }
    }

    broadcast = (val) => {
        this.$scope.$broadcast('broadcast', val);
    };
} 

要点:

  • 您可以使用 vm.something 从 View 访问 Controller 功能,例如ng-click="vm.broadcast('tada')"
  • 也为服务使用类,例如utilityServiceUtilityService 的一个实例,您可以获得类型安全。更多:https://www.youtube.com/watch?v=Yis8m3BdnEM&hd=1

更多使用类作为 Controller 模式:https://www.youtube.com/watch?v=WdtVn_8K17E&hd=1

关于angularjs - 如何将我的 javascript AngularJS 应用程序 Controller 转换为使用 Typescript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24968276/

相关文章:

javascript - Angular 新路由器将 $scope 注入(inject) Controller

javascript - 设置 Meteor、Vue 和 Typescript

typescript - 试图让 Jasmine 与 Webpack 一起工作

java - 如何使用 Spring Boot 和 Angular 7 配置 CRSF

javascript - 在 Typescript 的类型注释中使用 'is' 关键字的目的是什么

javascript - Angular ng-click 给出语法错误 : Token '{' invalid key at column 22 of the expression

angularjs - 语法错误 : Token ':' is an unexpected token when passing variable to directive

javascript - 如何验证 ng-repeat 中的输入字段

javascript - ng-repeat 中的隔离模型

angular - 使用catchError运算符捕捉Angular 9中的错误