Когда пользователь нажимает кнопку в моем приложении, я пытаюсь скомпилировать такую директиву и отправить документ (сложный объект 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}}
Ваше использование @
здесь превращает входящее значение в строку:
scope: {
mydata: '@'
}
Это объясняет, почему {{mydata}}
работает (просто показывает строку), но {{mydata.property}}
(строки не имеют этого property
).
Используйте =
вместо (и оставьте {{ }}
в вызове директивы).
mydata=doc
? как в$(event.currentTarget.parentElement).prepend($compile('<show-blah mydata=doc/>')($scope));
?=
или&
для привязки, Angular ожидает угловое выражение, а не интерполированную строку. С другой стороны, с@
он ожидает строку, которая может содержать интерполированные части (используя{{ }}
).