2016-03-06 6 views
3

Я создал пользовательскую директиву («повторно используемый компонент»), которая создает изолированную область видимости, связывая ее с двумя объектами, переданными ей через HTML-параметры. Проблема с этим быстро возникает, поскольку у меня есть до 600 из этих компонентов в моем документе, что приводит к 1200 наблюдателям и низкой производительности. Мне не нужны эти наблюдатели, только некоторая форма «связывать один раз» -функции при передаче объектов. Есть ли способ сделать это (или обходным путем), или мне нужно перепроектировать мой код?Пропустить объект к пользовательской директиве без создания наблюдателей?

(Передача данных в виде одной или нескольких строк, вместо того, чтобы объект, является намного нежелательны вариантами.)

+0

Альтернативы двух- привязка к каналам документируется в [Общей директиве по API-интерфейсу AngularJS] (https://docs.angularjs.org/api/ng/service/$compile#-scope-). – georgeawg

ответ

2

Вы должны использовать один-путь связывания:

scope : { 
    myField: '&' 
    .... 
} 

и в директиве, используя:

<my-directive my-field="::myDataObjectFromScope"></my-directive> 

Может this поможет

Но если значения постоянно на всех, вы должны использовать услугу для разделения ваших данных от бизнес-логики

2

Вы можете оценить объект вручную, без применения директивы Угловой области действия привязок. Скажем, у вас есть директива 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 здесь необходим, потому что директива сфера изолирована, и вы хотите, чтобы получить объект, определенный в космическом (родительском) объем.

Попробуйте и посмотрите, не имеет ли значение для вашей настройки.

+0

Выполняет то, что было запрошено, но принятый ответ имеет то преимущество, что работает даже при ng-повторении (не имея возможности вытащить объекты из родительской области). – Vestling

+0

Да, конечно, конечно. Я полностью забыл о единовременной привязке. – dfsq