2016-01-26 1 views
3

Итак, у меня есть вложенная директива, что мне нужно обмениваться информацией с отдельной директивой на странице (тот же контроллер). Я пробовал подход к области выделения, но учитывая, как вложенная первая директива, я отказался от этого подхода. Я пишу этот код, имея в виду, что $scope может не быть в 2.0. Есть ли альтернативное решение для моего подхода, которое бы соответствовало методам Angular Best?

Внутри вложена директива (3 уровня глубоко):

$scope.chooseCard = function (selectedId) { 
    this.data = 'init value'; 
    $rootScope.$emit('row chosen', selectedId); 
    this.data = selectedId; 
}; 

Внутри директиву № 2, который нуждается в данных из вложенной директивы:

$rootScope.$on('row chosen', function (e, data) { 
    ctrl.id = data; 
    console.log("this is the IDDDDDD", ctrl.id); 
    Service.func(ctrl.id); 
}); 
+0

Есть намного больше вещей, чем «$ scope», которые не будут вокруг;) –

ответ

2

$scope не может быть вокруг, но привязки наверняка. У вас есть два основных варианта:

  1. Используйте услугу и установите эту информацию там, а затем просмотрите ее в дочерней директиве. Это будет работать, но я чувствую, что это вредит составу и повторному использованию, поскольку у вас больше не может быть нескольких экземпляров директивы (все они будут зависеть от службы singleton).

  2. Используйте область изоляции, как вы упомянули ранее, а затем посмотрите на привязку, используя выражение '&'. Это будет ближе всего к Angular2, не используя что-то вроде ngForward, поскольку поток данных из родительского -> child по-прежнему является основным методом привязки данных в Angular2. Это предпочтительный способ выполнить это imo, даже если он окажется более подробным.

Независимо от того, какое решение вы выбрали, убедитесь, что вы не просачиваете память; если вы не отвязаете обработчик $rootScope.$on, вы будете утечка памяти каждый раз, когда экземпляр директивы будет создан и впоследствии уничтожен.

+0

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

+1

@ devdropper87 использовать прослушивание '$ destroy' и делать' $ off' – vittore