0

我正在使用带有 Angular 的 Typescript,如此处所述http://www.youtube.com/watch?v=WdtVn_8K17E

class MyController {
    thescope: any;
    static $inject = ['$scope'];

    constructor($scope) {
        $scope.vm = this;
        this.thescope = $scope;
    }

    ...
}

我想创建这个控制器的一个实例。我必须使用什么作为 $scope 参数?

var mc = new MyController(whatParameterHere?); // 
4

5 回答 5

1

如果您正在寻找在控制器和/或指令之间调用的通用方法,请使用服务。

如果您希望操纵 dom,请使用指令。

要回答您的问题:

module myApp.ctrl {
    myApp.controller("MyController", function($scope) {
        return new MyController($scope);
    }

    class MyController {
        thescope: any;
        static $inject = ['$scope'];

        constructor($scope) {
            $scope.vm = this;
            this.thescope = $scope;
        }

        ...
    }
}
于 2013-12-26T20:13:28.953 回答
1

你应该使用服务而不是控制器,

服务,您可以注入它并在您的应用程序中调用它的功能。

例如,如果您想从 api 调用数据:

module Data {
    export interface IDataService {
        http:ng.IHttpService;
        fetch:()=>ng.IPromise<string>;
    }
    export class DataService implements IDataService{
        http:ng.IHttpService;

        static $inject = ["$http"];
        constructor($http:ng.IHttpService) {
            this.http = $http;
        }

        fetch():ng.IPromise<string> {
            return this.http.get("link");
        }
    }
}
angular.module("app").service("DataService", Data.DataService);

如果你想使用像 jstree 这样的插件,你应该为此创建一个指令并在其中注入 DataService 并使用你想要的功能。

于 2015-06-11T08:26:38.507 回答
0

在 AngularJS 中,你的 dom 操作应该放在一个指令中。在您的情况下,您将为 JSTree 创建一个指令。这个答案应该给你一个良好的开端:How to use jsTree events with AngularJS

要了解有关指令的更多信息,请观看 AngularJS 的创建者的精彩视频:https ://www.youtube.com/watch?v=WqmeI5fZcho (我将在某个时候制作 AngularJS + TypeScript 指令视频)

于 2013-08-14T09:30:39.967 回答
0

正如其他人所建议的那样,您不应该自己做,角度会自己做。

但这可以通过将 $scope 作为字符串传入来完成,angular 会为你做 DI,所以你的代码应该是这样的

var mc = new MyController("$scope"); 
于 2014-07-17T09:53:06.427 回答
0

通常,您会使用声明为参数的私有变量来保存注入的 $scope 对象,如下所示:

..

class MyController {
  
  static $inject = ['$scope'];
  constructor(private scope: ng.IScope){
    this.init();  
  }
  
  private init() {
    this.scope.foo = 'bar';
  }
  
}

..

尽管 $inject 语句不是必需的,但它明确指出 $scope 是注入资产:-)

然后,您将以角度方式创建 MyController 的实例,如下所示:

angular.module('app')
  .controller('MyController', MyController);

于 2016-01-09T14:32:49.870 回答