Как заставить IntelliSense VS Code работать с внедренными сервисами AngularJS? - PullRequest
0 голосов
/ 23 сентября 2018

Поэтому я пытаюсь получить код Visual Studio, который предоставит мне его intellisense для сервисов моего приложения AngularJs (не Angular).Мне удалось получить стандартный тип для angular (теперь, когда я набираю «angular», он предлагает что-то вроде модуля и т. Д.).Это работает, и это здорово, однако я не могу найти способ заставить его работать с моими службами (или фабриками).Я знаю, что для IDE не так просто вычислить код, который вводится через внедрение зависимостей и т. Д.

НО, кажется, работает нормально, когда и мой контроллер, и служба, которую он использует, находятся в одном и том же файле JS!Единственная проблема, с которой я сталкиваюсь, заключается в том, что мое приложение слишком велико, чтобы помещаться в один файл JS, и как только я разделяю код на несколько файлов, происходит сбой.

Обратите внимание, что я пыталсяиспользуя «директиву тройного слэша» (///), и это не помогло.Я весь день ломал голову над этим, буду очень признателен за любую помощь.

Пример кода:

var app = angular.module('app', []);

app.controller('ctrl', ['$scope', 'test',
    function ($scope, test) {

        $scope.test = test.word; //TRY TYPING 'test.' --> want to have intellisense suggest 'word'

}]);
//PUT THE BELOW IN ANOTHER FILE AND INTELLISENSE DOES NOT SHOW 'word'
app.service('test', [function(){
    /**
     * @type {string}
     */
    this.word = "balls";
    /**
     * @function
     * @param {string} variable
     */
    this.getLower = function (variable) {
        return variable.toLowerCase();
    }
}]);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
  <div ng-controller="ctrl">
    <p class="lead">{{test}}</p>
  </div>
</div>

1 Ответ

0 голосов
/ 23 сентября 2018

Вы упоминаете, что пытались использовать директивы с тройным слешем, но неясно (по крайней мере из вашего фрагмента), действительно ли вы используете TypeScript.Если вы не используете последнее, вам понадобится, если вы хотите улучшить IntelliSense для своих файлов.

VS Код предоставляет вам ограниченный IntelliSense, который вы видите из определений типа , предоставленных дляAngularJS .

Короче говоря, вам необходимо:

Вот очень короткий пример такого стиля:

// Service.ts
export default class Service {
    constructor() {}
    log(message: string) {
        console.log(message);
    }
}

// Controller.ts
import ng from 'angular';
import Service from './Service';

export default class Controller implements ng.IController {
    static $inject: string[] = ['Service'];
    constructor(private service: Service) {}
    $onInit() {
        this.service.log('Hello, world!');
    }
}

// App.ts
import angular from 'angular';
import Controller from './Controller';
import Service from './Service';

export const angular
    .module('app', [])
    .service('Service', Service)
    .controller('Controller', Controller)
    .name;

Если вы попробуете вышеописанное, вы сможете получить IntelliSense для вызова log внутри Serviceот Controller.ts.

...