не может получить доступ к свойству объекта внутри директивы

0

Когда пользователь нажимает кнопку в моем приложении, я пытаюсь скомпилировать такую директиву и отправить документ (сложный объект json), на который была нажата директива

$scope.displayBlah = function(event, document){

  $scope.doc = document; 
  $(event.currentTarget.parentElement).prepend($compile('<show-blah mydata={{doc}}/>')($scope));

}

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

{{mydata}} 

но я не могу получить какое-либо индивидуальное свойство, подобное этому

{{mydata.property}}

Вот что я делаю

myApp.directive('showBlah', function(){
return {
            restrict: 'AE', 
            scope: {
                mydata: '@'
                 }
            replace: true, 
            template: <div class='root'>{{mydata}} {{mydata.property}}</div>,
            link: ///code ommitted

Вопрос. Можно ли получить доступ к объекту внутри объекта в директиве, подобной этому?

 {{mydata.property}}
Теги:

1 ответ

1
Лучший ответ

Ваше использование @ здесь превращает входящее значение в строку:

        scope: {
            mydata: '@'
             }

Это объясняет, почему {{mydata}} работает (просто показывает строку), но {{mydata.property}} (строки не имеют этого property).

Используйте = вместо (и оставьте {{ }} в вызове директивы).

  • 0
    так что пропустить {{}} в вызове директивы означает сделать это? mydata=doc ? как в $(event.currentTarget.parentElement).prepend($compile('<show-blah mydata=doc/>')($scope)); ?
  • 0
    Да. Когда вы используете = или & для привязки, Angular ожидает угловое выражение, а не интерполированную строку. С другой стороны, с @ он ожидает строку, которая может содержать интерполированные части (используя {{ }} ).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню