2015-03-04 3 views
0

Я использую синтаксис controller as и не знаю, как получить доступ к области действия дочерней директивы. Я могу сделать это так, но должен быть лучший способ, нет?Как получить доступ к охвату дочерней директивы в угловом?

angular.module('saProducts').directive 'saProductNew', -> 
    restrict: 'A' 
    templateUrl: 'app/products/templates/new.html' 
    controllerAs: 'product' 
    controller: ($scope, Product) -> 

    @save = -> 
     Product.save(product: @current).$promise.then (product) -> 
     $scope.$$childHead.images.owner = product # Isn't there a way to access it without going through the $$childHead object? 

ответ

0

У вас есть еще три решения, которые я могу думать:

  1. Используйте сервис для обмена данными между родительскими и дочерними областями.

  2. Использование emit/broadcast для трансляции изменений с дочернего на родительский.

  3. Создайте дочернее свойство в родительском пространстве. Так, например, в родительской директиве, $ scope.p = {c: "change from"}, вы можете получить доступ к этому в области child как, $ scope.pc = "changed to", теперь, если вы получите доступ к нему в родительском , он будет отображаться как «измененный» из-за прототипального наследования.

Я лично использую 1-ый вариант, если его сложное приложение, а затем NR 3 для простых вещей, и, наконец, вариант NR 2.

+0

Этот ответ является правильным. Я бы пошел с 1 или 2. Вот хорошая ссылка, относящаяся к услугам http://viralpatel.net/blogs/angularjs-service-factory-tutorial/, и вот одна из них - http://stackoverflow.com/a/14502755/852806. Я использую оба в зависимости от обстоятельств. – HockeyJ

+0

Хорошо, спасибо. Я попробовал трансляцию, но она не дает мне ответного значения вызванного метода. Мне нужно это обещание. В любом случае, чтобы это сделать? – Nathan

Смежные вопросы