Squeak.ru - шаблоны программирования

Лучшая практика для угловых контроллеров в coffeescript

Какова наилучшая практика создания контроллеров angular с использованием классов сценариев кофе? Я некоторое время гуглил, но пока не нашел действительно хорошего решения.

Согласно этой статьи автор предлагает следующий подход:

angular.module('myApp').controller 'SomeCtrl',
  class SomeCtrl
    someModels: -> ...

Однако не уточняется, как делать какие-либо инъекции в такой контроллер. Поскольку кофе автоматически перемещает все методы в прототип конструктора, я не смогу получить доступ к внедренным службам в этих методах.

Пока единственный способ обойти это:

angular.module('myApp').controller 'SomeCtrl',
  class SomeCtrl
    @$inject: ['SomeService']
    constructor: (someService) -> 
      @load = ->
        # access to someService

Очевидно, что это довольно уродливо, не говоря уже о неэффективном использовании памяти.

Итак, вопрос в том, как лучше всего определить угловой контроллер с помощью кофейных вкусностей?

РЕДАКТИРОВАТЬ:

Есть еще один вариант явного использования инжектора:

app = angular.module('myApp')
injector = angular.injector([app.name])

injector.invoke ['SomeService', (SomeService) -> 
  app.controller 'SomeCtrl',
    class SomeCtrl
      foo: 'bar'
      func: ->
        # Prototype function with access to SomeService without exposing it in API.
]

Это, однако, делает порядок кода зависимым и чертовски уродливым.

В идеале я бы искал какой-то способ определить контроллер как фабрику - вместо передачи функции конструктора я хотел бы передать функцию, которая должна возвращать конструктор. Возможно ли что-то подобное?

30.07.2015

  • Рассматривали ли вы constructor: (@someService) ->, а затем использовали @someService в других методах? 31.07.2015
  • @Oleg - Это идея, однако она кажется немного неправильной из-за того, что службы выставляются в API контроллера. Еще лучше, чем определять все функции в конструкторе. 31.07.2015
  • Или вы можете просто использовать функцию. Вы не обязаны использовать класс. 31.07.2015
  • @Oleg - Верно, но в Coffee нет именованных функций. Даже с функцией мне нужно определить все методы непосредственно для нового объекта, что кажется неэффективным с точки зрения использования памяти. 31.07.2015

Ответы:


1

Сначала определите класс, добавив необходимые службы в конструктор...

class SomeCtrl
  constructor: (someService)-> alert someService 9

Затем подключитесь в качестве контроллера к приложению...

angular.module('myApp').controller 'SomeCtrl', SomeCtrl

Пример на jsfiddle

<div ng-app="myApp">
  <div ng-controller="SomeCtrl">
  </div>
</div>

... а также ...

angular.module 'myApp', []
angular.module('myApp').factory 'someService', ->
  (x)-> x * x;

class SomeCtrl
  constructor: (someService)-> alert someService 9
  someModels: ->

angular.module('myApp').controller 'SomeCtrl', SomeCtrl
02.08.2015
  • Спасибо за ответ. Моя главная забота, однако, заключается в том, как получить доступ к введенным службам в других функциях экземпляра, кроме конструктора. Для сервисов я могу создать весь класс внутри функции, возвращающей класс, поэтому все элементы имеют доступ ко всем введенным сервисам, однако контроллер требует прямого конструктора без оболочки clojure. Это не похоже на проблему, связанную с кофе. 03.08.2015
  • @BroiSatse, ты понял, как это сделать? Ищем похожее решение. 04.01.2016
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...