Angular Как передать область для просмотра из службы?

#javascript #angularjs #templates #view #scope

#javascript #angularjs #шаблоны #Вид #область

Вопрос:

у меня есть глобальная функция в вспомогательной службе.

 this.displayModalWithInput = function ($scope, title, cotroller, functionCallback) {
        $scope.modalProperties = {
            modalTitle : title,
            modalController : cotroller,
            modalFunction : functionCallback
        };

        $('#myModal').modal();
    };
  

В моем шаблоне у меня есть стандартное модальное окно Bootsrap. Проблема в том, что я пытаюсь получить доступ к области с помощью:

 {{modalProperties.modalTitle}} 
  

Ничего не отображается.

Как это можно решить, если я хочу использовать глобальную доступную функцию и передавать данные из этой глобальной функции в доступную область?

Спасибо за любой совет.

Ответ №1:

сначала определите $scope.modalProperties=[]; в вашем контроллере. Затем, когда вы вызываете функцию displayModalwithInput из контроллера, пожалуйста, передайте $scope в качестве одного из аргументов. например, displayModalwithInput($scope, …) если это не работает, я хотел бы увидеть ваш глобальный сервисный код.

Ответ №2:

Сервисы (фабрики) являются одиночными, и это не очень хорошая практика (я бы сказал, что вы не можете) вводить область видимости в службу.


В вашем случае, чтобы избежать дублирования кода, я бы вместо этого создал директиву (изолировать область), где в функции link вы можете записать всю соответствующую логику.

Эта демонстрация может вам помочь PLUNKER

Пример директивы

 .directive( 'confirmPopup', function () {
  return {
    restrict: 'A',
    replace: true,
    scope: { title: '@', content: '@', placement: '@', animation: 'amp;', isOpen: 'amp;', func: 'amp;' },
    templateUrl: 'confirmPopup.html',
    link: function ($scope, element, attrs) {
      $scope.confirm = function(){

        $scope.$parent.deleteThing();
        $scope.$parent.tt_isOpen = false;
      }
      $scope.cancel = function(){
        $scope.$parent.tt_isOpen = false;
      }
    }
  };
})