nidhin
nidhin

Reputation: 6930

How to call parent method from model controller

I have one controller named "contractController"

contractController contains a method save()

contractController opens one model window with controller named "PopUpcontroller"

from PopUpcontroller i want to call save method on contractController

tried to call save method like $parent but nothing works.

Please advice.

Upvotes: 1

Views: 1972

Answers (3)

Jussi Kosunen
Jussi Kosunen

Reputation: 8307

You need to make sure the popup is created from contractController's scope if you want to retain its prototype. How are you creating the popup?

Something like this in Angular UI Boostrap (I don't use it but the API should accept it):

$modal.open({
    scope: $scope,
    /* ... other opts */
});

Upvotes: 1

Boon
Boon

Reputation: 2151

If you are using Angular UI Bootstrap (http://angular-ui.github.io/bootstrap/), then, make use of the "resolve" attribute when you call $modal.open().

Whatever you add to resolve, will be available if you hook it up as a dependency injection.

In the example on their page, the "item" is available as below because it is hooked up in "resolve".

Resolve:

var modalInstance = $modal.open({
  templateUrl: 'myModalContent.html',
  controller: 'ModalInstanceCtrl',
  size: size,
  resolve: {
    items: function () {
      return $scope.items;
    }
  }
});

Use:

angular.module('ui.bootstrap.demo').controller('ModalInstanceCtrl', function ($scope, $modalInstance, items) {

Upvotes: 1

Michael
Michael

Reputation: 3326

If the two controllers are nested so that:

<div ng-controller="contractController">
   <div ng-controller="PopUpcontroller">
   </div>
</Div>

you can just call $scope.save() on the popUpController and it automatically goes up to find a parent with that method (till the $rootScope).

if they are not nested you should use the services in order to perform the communication among controllers

Upvotes: 1

Related Questions