fuyi
fuyi

Reputation: 2639

angular ui modal can NOT refer to parent scope

i am using angular ui modal to create modal in my project.

Everything works fine until I need to refer to variable in parent scope. see plunker code

It seems like modal can't access parent scope. Is there anyway to overcome this?

Upvotes: 11

Views: 24001

Answers (3)

lyschoening
lyschoening

Reputation: 18738

Angular UI's modals use $rootScope by default (See the documentation here).

You can pass a scope parameter with a custom scope when you open the modal – e.g. scope: $scope if you want to pass the parent scope. The modal controller will create a sub-scope from that scope, so you will only be able to use it for your initial values.

Upvotes: 24

Shaidar
Shaidar

Reputation: 181

You'll need to refer to the parent scope in your $modal options. Angular documentation

Corrected Plunker Version

Below is also a code snippet of what I added to make it work.

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

Upvotes: 16

BironDavid
BironDavid

Reputation: 503

You can add an ID to the parent div and use his scope.

<div id="outerdiv"  ng-controller="OuterCtrl">
<h2>Outer Controller</h2>
<input type="text" ng-model="checkBind">
<p>Value Of checkbind: {{checkBind}}</p>

And set up a "fake" binding within the controller

//init
$scope.checkBind = angular.element(document.getElementById('outerdiv')).scope().checkBind;

  $scope.$watch('checkBind', function (newValue, oldValue) {
//update parent
  angular.element(document.getElementById('outerdiv')).scope().checkBind = $scope.checkBind;
  });

See http://plnkr.co/edit/u6DuoHJmOctFLFhvqCME?p=preview

Upvotes: 1

Related Questions