2013-05-27 4 views
1

У меня есть контроллер, который находится внутри другого контроллера.Angularjs наследующий пул родительской области путаницы

<div ng-controller="post"> 
    <div ui-if="isAllowed"> 
    <footer ng-controller="footer"></footer> 
    </div> 
</div> 

Я считаю, что ui-if создает новый масштаб, поэтому здесь есть 3 области.

Я хочу, чтобы контроллер нижнего колонтитула мог получить доступ к объему сообщения.

.controller('post', function($scope) { 
    $scope.foo = "bar" 
}) 

я могу легко сделать $scope.$parent.$parent.foo, но я читал, что телескопы должны автоматически наследуются от родителя, а родитель вещь просто супер громоздкая.

Цитата Angularjs вики:

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

Как получить доступ к Foo из сферы колонтитула?

+0

Вы просто напрямую обращаться к ним, как если бы они были в основной области. [Plunk Here] (http://plnkr.co/edit/0a4mFJdSHs275tqCpYvk?p=preview) – rGil

+0

@rGil О, ты прав. Я смотрел на Batarang, который показывал области отдельно, но теперь я понимаю, что это не то, что означает ха-ха. Спасибо. – Harry

ответ

3

Как вики сказал, вам ничего не нужно делать. Просто получите доступ к нему через свое имя.

<div ng-controller="post"> 
    <div ui-if="isAllowed"> 
    <footer ng-controller="footer"> 
     {{ fooB }} 
    </footer> 
    </div> 
</div> 

function post($scope) { 
    $scope.fooA = 'Foo A'; 
} 

function footer($scope) { 
    $scope.fooB = $scope.fooA + " and Foo B"; 
} 

Например выше воздаст Foo A and Foo B

Fiddle here.

+6

В чем может быть проблема, если это не работает? Я использую Angular-loader, и когда я пытаюсь вызвать методы на parentcope, я получаю «неопределенную» ошибку, что метод не существует на объекте? Любые идеи, как исправить это? – Hcabnettek

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