У меня есть следующие 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",
},
};
Однако связывание до сих пор не удается. Есть ли способ отладить этот процесс? Не могли бы вы рассказать мне лучший дизайн, если я ошибаюсь?
смущает сам проходить в целом контроллер объект. Ваша директива использует 'controllerAs: 'headerController'', поэтому вам нужен этот объект, на который ссылается в представлении или удалить контроллер. Как – charlietfl
Да, мне также нужно использовать' headerController', но также 'pageController' из верхнего (обертки) div, потому что 'PageName' находится в' pageController'. Возможно ли иметь оба (это то, что я пытаюсь достичь с помощью области)? –
У вас было бы два разных экземпляра контроллера, так что это не сработало бы для вас. Вам необходимо связаться с контроллером, чтобы директировать через службу, передавая данные директиве или через события. Однако я рекомендую вам воспользоваться услугой. Удачи! –