Как обеспечить API для вашей угловой директивы?

0

До сих пор я разрабатывал виджеты в javascript без AngularJS. Подход всегда один и тот же: виджет предоставляет API, который позволяет клиентам изменять его из любой части приложения. Этот подход не изменился, но теперь мне нужно использовать AngularJS. У меня есть хотя в следующем решении, и я хотел бы знать ваши варианты:

angular.module("app", ["myCustomWidget"])

.controller("MainCtrl", ["$scope", "myCustomWidgetService", function($scope, myCustomWidgetService) {
  $scope.myCustomWidgetService = myCustomWidgetService;
  $scope.changeMyCustomWidget = function() {
    $scope.myCustomWidgetService.message = "This message was written by MainCtrl";
  }
}]);


/**
WIDGET
*/
angular.module("myCustomWidget", [])

.factory("myCustomWidgetService", function() {
  var myCustomWidgetService = {};
  myCustomWidgetService.message = "This is the default message inside the Service";
  return myCustomWidgetService;
})

.directive("myCustomWidgetDirective", [function() {
  return {
    bindToController: true,
    controllerAs: "$ctrl", // I dont know where it is used but angular fails if it is not present -> https://docs.angularjs.org/error/$compile/noident
    controller: "myCustomWidgetCtrl",
    scope: {},
    template: '<button ng-click="changeMyCustomWidget()" type="button" name="button">Click to change from directive</button><p>{{myCustomWidgetService.message}}</p>'
  }
}])

.controller("myCustomWidgetCtrl", ["$scope", "myCustomWidgetService", function($scope, myCustomWidgetService) {
  $scope.myCustomWidgetService = myCustomWidgetService; //Use the Service as a part of the scope
  $scope.changeMyCustomWidget = function() {
    $scope.myCustomWidgetService.message = "This message was written by myCustomWidgetCtrl";
  }
}]);

http://plnkr.co/edit/L58WpCkGyYionGfoeewd

Как вы думаете? это хорошая идея использовать Сервис как часть директивного контроллера?

Теги:
widget
directive

1 ответ

0

Вы должны вводить услуги в контроллеры. Их целая цель в жизни - обрабатывать данные для контроллеров, которые являются средними менеджерами большинства приложений MVC.

Ваш вариант использования является одним из самых распространенных; у вас есть ваш контроллер, подойти к вашему сервису и пойти: "Эй, пожалуйста, покажите это сообщение для меня". Затем еще один контроллер поднимается и просит службу показать другое сообщение. И так далее.

Возможно, у вас также есть контроллер, который подходит к сервису - возможно, с пальто и флешкой, - и с хриплым шепотом пойдёт: "Эй, пожалуйста, держите эти данные для меня. У меня есть друг, Нет, все круто и на уровне ". И служба, которая имела это, случается много раз в жизни, точно знает протокол для этого. Поместите данные на эту полку; переверните этот свет; противостоять желанию alert(cops). Позже, другой контроллер, также носивший пальто и флешку, но на этот раз он бежевый, а не черный, поднимается, берет данные, кивает, а затем исчезает в ночи.

В обоих случаях служба ничего не знает о том, как и почему она ничего не делает; что задача контроллера. Точно так же контроллер не знает, как и почему что-либо делается, когда он отрывает свою задачу; он просто ожидает, что все будет работать.

Надеюсь, это поможет.

  • 0
    Спасибо! это разрешит мои сомнения :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню