Передать объект в пользовательскую директиву без создания наблюдателей?
Я создал пользовательскую директиву ("повторно используемый компонент"), которая создает изолированную область видимости путем привязки к двум объектам, переданным ей через HTML-параметры. Проблема с этим быстро возникает, так как в моем документе содержится до 600 таких компонентов, что приводит к 1200 наблюдателям и низкой производительности. Мне не нужны эти наблюдатели, просто какая-то форма "связать один раз"- функциональность при прохождении объектов. Есть ли способ сделать это (или обходной путь), или мне нужно изменить дизайн моего кода?
(Передача данных в виде одной или нескольких строк вместо объекта является очень нежелательным вариантом.)
2 ответа
Вам следует использовать одностороннюю привязку:
scope : {
myField: '&'
....
}
и в директиве используя:
<my-directive my-field="::myDataObjectFromScope"></my-directive>
Может быть, это поможет
Но если значения постоянно на всех, вы должны использовать сервис, чтобы отделить ваши данные от бизнес-логики
Вы можете оценить объект вручную, не используя привязки угловых директив. Скажи, у тебя есть директива some-component
и вы хотите передать config
объект в нем сохраняя изолированную директивную область видимости. Вы могли бы сделать что-то вроде этого:
<some-component config="controller.config"></some-component>
Тогда директива может выглядеть так:
.directive('someComponent', function() {
return {
scope: {
// some bindings, but not config
},
link: function(scope, element, attrs) {
var config = scope.$parent.$eval(attrs.config)
console.log(config)
}
}
})
$parent
здесь необходимо, потому что директива scope изолирована, и вы хотите получить объект, определенный во внешней (родительской) области видимости.
Попробуйте и посмотрите, будет ли это иметь значение для вашей установки.