2015-10-01 7 views
1

Я работаю над книгой Learning Angular Js by Brad Dayley. В его примерах используется $scope. Я подталкиваю себя к использованию controllerAs. В седьмой главе книги основное внимание уделяется созданию пользовательских директив.Доступ к данным из родительского контроллера с контроллером как

Я создал простой, похожий на приведенный пример. Внутри я устанавливаю transclude в true. Я использую функцию ссылки для добавления нижнего колонтитула к родительскому div. Внутри тега нижнего колонтитула автор книги вызывает scope.$parent.title В примере значение title происходит от родительского контроллера.

.directive('myBox', function() { 
     return { 
      transclude: true, 
      restrict: 'E', 
      scope: {title: '@', bwidth: '@bwidth'}, 
      template: "<div><span class='titleBar'>{{title}}"+ "</span> <div ng-transclude></div></div>", 
      link:function(scope, elem, attr, controller, transclude) { 
       console.log('scope', scope.$parent) 
       console.log('controller', controller); 
       elem.append('<span class="footer">'+ scope.$parent.title + '</span>'); 
       elem.css('border', '2px ridge black'); 
       elem.css('display', 'block'); 
       elem.css('width', scope.bwidth); 
      } 
     } 
    }) 

Внутри книги контроллер использует $scope, я хотел использовать controller as и я использую vm равным это. Вот моя функция для контроллера. Предполагается, что значение vm.title будет значением на нижнем колонтитуле.

Я получаю undefined с моей консоли, когда проверяю значение.

function FunCtrl() { 
    var vm = this; 

    vm.title = "myApplication"; 
} 

Вот plunker того, что я пытаюсь

http://plnkr.co/edit/uUeKrTwLOfkcGpkTU1Uz?p=preview

+0

Можете ли вы предоставить полный пример, показывающий вашу проблему? – LionC

+0

Вот базовый плункер http://plnkr.co/edit/uUeKrTwLOfkcGpkTU1Uz?p=preview – Winnemucca

ответ

1
  • При использовании нг-контроллер синтаксиса, это просто призывающие член контроллера как «начать() «в сфере охвата.

<input ng-click="start()" type="button" value="Button"/> 

  • Но при использовании controllerAs синтаксис, экземпляр контроллера создается и присваивается ссылочной переменной, что вы предоставили - «удовольствие». Таким образом, все, что вы определили в контроллере, доступно только с помощью ссылки. - «fun.start()» в области.

<input ng-click="fun.start()" type="button" value="Button"/> 

Поэтому вы должны сделать то же самое при обращении к членам родительской области, если вы использовали controllerAs синтаксис, как показано ниже

scope.$parent.fun.title 

Demo

Примечание Контроллер, который вы выводите на консоль, относится к той директиве, которую вы не определили.

+0

Хороший улов. благодаря – Winnemucca

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