2015-05-22 2 views
0

Я создаю директиву, которая генерирует некоторую разметку на основе свойства связанного поля. Я планирую использовать его как это:AngularJS Directive: Get Object from Attribute

<mvc-error-list field="myForm.testField"></mvc-error-list> 

В директиве я хочу посмотреть свойство объекта myForm.testField. Но я не знаю, как получить объект myForm.testField на основе значения строки, передаваемого функции шаблона.

+0

Создайте plunkr с проблемой – sirrocco

ответ

1

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

angular.module('testApp', []) 
 
.directive('myDirective', function(){ 
 
    return { 
 
    restrict: 'E', 
 
    scope: { 
 
     field: '=' 
 
    }, 
 
    link: function(scope){ 
 
     console.log(scope.field.message) 
 
    } 
 
    }; 
 
}) 
 
.controller('myCtrl', function($scope){ 
 
    $scope.ctrlField = { message: 'Hello, World' }; 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app='testApp' ng-controller='myCtrl'> 
 
    <my-directive field='ctrlField'></my-directive> 
 
</div>

В качестве альтернативы, если вам не нужно, чтобы передать что-нибудь обратно к контроллеру вы можете использовать одну сторону переплета. Который работает одинаково, но вы используете символ & вместо = при определении области выделения. Вам также нужно получить доступ к свойству как функции, так как односторонняя привязка данных создает «функцию геттера» в области вашей директивы.