2014-09-14 8 views
0

У меня есть две директивы обертку с общими значениями и внутренняя директива, в контроллере я есть объект element

в шаблоне я есть

<div wrapper="element"> 
    <div inner="name"></div> 
    <div inner="lastname"></div> 
</div> 

Пример: Я хочу bind element.name свойство из внутренней директивы, внутренняя директива его сложный виджет

Я пытаюсь получить доступ к element из внутренней обертки, как я могу ее достичь?

обертка директива

{ 
    scope: { 
    wrapper: '=' 
    } 
} 

внутренняя директива

{ 
    require: '^wrapper', 
    scope: { 
    inner: '@' 
    } 
} 

в шаблоне внутренней директиве

<input type="text" ng-model="$parent.wrapper[inner]" /> 

Не работает!

Примечание: я не хочу установить для каждой внутренней директивы модели, примера

<div wrapper="element"> 
    <div inner="name" model="element.name"></div> 
    <div inner="lastname" model="element.lastname"></div> 
</div> 
+0

Вы получаете «директивы обертки с $ родителем, правом. Так что же не получается? Почему вы хотите получить доступ к внутренней оболочке, если 'inner' уже является текущей областью? –

+0

В настоящее время мне нужно передать многие свойства во внутреннюю и все inners имеют те же свойства, что и я, обертывания и использование общей директивы – rkmax

ответ

1

$parent не может корректно работать в случае, если есть какая-либо промежуточная сфера, созданная ng-repeat, ng-include ...

правильный путь заключается в использовании require:

в родителе, определить контроллер:

{ 
    scope: { 
    wrapper: '=' 
    }, 
    controller: function ($scope) { 
    this.scope = $scope; 
    } 
} 

В вашей внутренней директиве:

{ 
    require: "^wrapper", 
    scope: { 
    inner: '@' 
    }, 
    link: function (scope, element, attrs, wrapperController){ 
    scope.wrapperScope = wrapperController.scope; 
    } 
} 

во внутреннем шаблоне директивы

<input type="text" ng-model="wrapperScope.wrapper[inner]" /> 
+0

'controller: function ($ scope) {this.scope = $ scope}' сделал трюк – rkmax

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