2015-08-13 6 views
0

Я пытаюсь совать модальность на родительском контроллере и сделать что-то для ребенка после использования нажать кнопкуКак обнаружить событие щелчка в моем случае

Например, контроллер ребенка

$scope.openModal = function(){ 
    var item = 'my first item' 
    $scope.showItem(item); 

    //I want to do something here after user clicks 'Click me' button 
}) 

родитель контроллер

$scope.showItem = function(item){ 
    $modal({ 
       template: 'item-modal.html', 
       scope: $scope,     
      }); 
}) 

В моем пункт-modal.html

//other html 
<button type="button" class="btn btn-primary" ng-click="confirm()">Click me</button> 

Поэтому я хочу, чтобы ребенок мог знать действие родителя, которое является нажатием модальной кнопки. Есть ли способ сделать это? Большое спасибо!

ответ

1

Вы можете прослушивать события через $broadcast, чтобы прослушивать события по родительской цепочке.

// Parent controller 
$scope.confirm = function() { 
    $scope.broadcast("myTestEvent", {'key':'value'}); 
} 


// Child controller 
$scope.$on("myTestEvent", function(data) { 
    console.log("Event from parent fired with data as : " + data); 
}) 
+0

Я стараюсь избегать трансляции, поскольку это не лучшая практика для углового. спасибо, хотя – BonJon

1

угловой-ui-модальный, верно?

Если так, $ modal api возвращает обещание, разрешающее, когда модаль закрывается либо $ close (успех), либо $ увольнением (сбой). См. https://angular-ui.github.io/bootstrap/#/modal для получения дополнительной информации, или https://docs.angularjs.org/api/ng/service/ $ q для информации о обещаниях.

Так что это будет в значительной степени выглядит следующим образом:

$scope.openModal = function(){ 
    var item = 'my first item' 
    $scope.showItem(item).then(function(result) { 
     // DO something with result 
    }); 
}); 

Родитель контроллер

$scope.showItem = function(item){ 
    return $modal({ 
       template: 'item-modal.html', 
       scope: $scope,     
      }); 
}) 

В моем пункт-modal.html

//other html 
<button type="button" class="btn btn-primary" ng-click="$close(myResult)">Click me</button> 

или использовать свой собственный метод в качестве ng-click обработчик, который будет вызывать $ scope. $ close с тем, что вы хотите передать в качестве результата обещания.

+0

+1, так что если я хочу использовать свой собственный метод без прохождения параметров в моем modal.html, могу ли я сделать ng-click = 'clickme()' – BonJon

+0

yep, с помощью метода clickme(), вызывающего $ close или $ увольнения чтобы закрыть модальный результат, с которым вы хотите вернуться к своему ребенку. –

+0

Я вижу. Однако результат возвращает из обещания весь item-modal.html вместо метода myResult метода. Не могли бы вы прояснить это для меня? – BonJon

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