Я создал директиву и передал атрибут как объект (пара имя / значение) строки. Однако, если я попытаюсь получить доступ к значению атрибута внутри шаблона, оно не будет оценено. Атрибут передается, как показано ниже
<testcomponent myInfo="{firstname:'green',lastname:'Woods'}"></testcompone>
Шаблон определяется, как показано ниже
template: '<div>This will not run fine..! </div>'+
'<div> This first name is: {{myInfo.firstname}} </div>',
Я создал изолированную область, как показано ниже
scope: {
info: '=myInfo',
},
Jsfiddle - это @ https://jsfiddle.net/visibleinvisible/be4ww6vu/
Переменная ({{myInfo.firstname}}) должна быть оценена, но этого не происходит. Я ищу решение, которое не требует создания контроллера (я тоже ошибаюсь)
Заранее спасибо, Джейсон
Есть несколько проблем (указанных ниже), а также несколько советов по использованию Angular.
myInfo
в вашей директиве, то в разметке вам нужно установить его как my-info
. Angular автоматически адаптирует имя из my-info
разметки в myInfo
директиву.myInfo
, однако ваше объявление области назначает это переменной области info
. Чтобы вывести имя, вам нужно изменить его на {{info.firstname}}
.Ниже приведен код исправления с комментариями:
<div ng-app="testApp" >
<!-- Issue #2: If you want camel-case "myInfo", angular expects the attribute to be "my-info". -->
<test-component
my-info="{firstname: 'green',lastname: 'Woods'}"/>
</div>
И директива:
var module = angular.module('testApp', [])
.directive('testComponent', function () {
return {
restrict: 'E',
// Issue #1: The template referenced 'myInfo', but your scope was assigning that to 'info'.
template: '<div>This will not run fine..! </div>'+
'<div> This first name is: {{info.firstname}} </div>',
scope: {
/* Hints:
= is two way-binding "deep" watch.
=* is "shallow" watch, and on this simple object, that is all you need.
@ is text-binding (for reference)
*/
info: '=*myInfo',
},
controller: function($scope) {
},
link: function (scope, element, attrs) {
}
};
});
Наконец - обычно (по моему опыту) вы не устанавливаете значение атрибута непосредственно в разметке, а скорее ссылаетесь на $scope
переменную из своего контроллера и назначаете значение в своем контроллере.
Эта статья взята из Интернета, укажите источник при перепечатке.
Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.
я говорю два предложения