2016-09-28 3 views
0

У меня есть следующие HTML страницы (главная страница, где HeaderController находится внутри PageController):доступа вне контроллера от шаблона директивы

<div ng-controller="PageController as pageController"> 
    <page-header ng-cloak></page-header> 
</div> 

Это мой PageController с PageName собственности внутри:

export class PageController { 

    public static ControllerDeclaration = ["$http", "$scope", PageController]; 

    public PageName: string = "New Page"; 

    constructor(private $http: angular.IHttpService, private $scope: angular.IScope) { 
    } 

} 

Для директивы pageHeader, я использую следующий шаблон, который хочет получить доступ к страницеКонтроллер снаружи:

 <a class="page-edit"> 
      <span class="page-name"> 
       {{pageController.PageName}} 
      </span> 

      <i class="fa fa-pencil"></i> 
     </a> 

Однако это связывание приводит к пробелу вместо имени страницы. Поэтому я думаю, что он не может понять pageController.

Поиск по статьям StackOverflow, я пытаюсь использовать сферу, добавив следующее объявление на главную страницу HTML:

<div ng-controller="PageController as pageController"> 
    <page-header page-controller="pageController" ng-cloak></page-header> 
</div> 

и директивы:

.directive("pageHeader", Directives.PageHeader) 

// This is Directives.PageHeader function: 
return { 
     templateUrl: "/Scripts/angular-app/templates/page/header.html", 
     restrict: "E", 
     controller: Controllers.HeaderController.ControllerDeclaration, 
     controllerAs: "headerController", 
     scope: { 
      pageController: "=pageController", 
     }, 
    }; 

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

+0

смущает сам проходить в целом контроллер объект. Ваша директива использует 'controllerAs: 'headerController'', поэтому вам нужен этот объект, на который ссылается в представлении или удалить контроллер. Как – charlietfl

+0

Да, мне также нужно использовать' headerController', но также 'pageController' из верхнего (обертки) div, потому что 'PageName' находится в' pageController'. Возможно ли иметь оба (это то, что я пытаюсь достичь с помощью области)? –

+0

У вас было бы два разных экземпляра контроллера, так что это не сработало бы для вас. Вам необходимо связаться с контроллером, чтобы директировать через службу, передавая данные директиве или через события. Однако я рекомендую вам воспользоваться услугой. Удачи! –

ответ

1

У вас было бы два разных экземпляра контроллера, чтобы это не сработало для вас. Вам необходимо связаться с контроллером, чтобы директировать через службу, передавая данные директиве или через события. Однако я рекомендую вам воспользоваться услугой. Удачи!

Смежные вопросы