 <p><code>ngModel</code> does not create a new isolated scope for itself so it can <code>$watch</code> without having to hardcode a <code>$parent</code> in it's internal code. But then you add another directive on the same DOM node that creates an isolated scope for itself. Couple this with the fact that you can only have a single isolated scope on a DOM node and you basically force <code>ngModel</code> to use/work with the same scope <code>cmPopover</code> created.</p> <p>So when writing <code>ng-model="currentEditItem.strFirstName"</code> you are actually addressing the <code>$scope</code> inside the <code>cmPopover</code> directive, no the one in the (parent) controller. You can check this is the case by using <code>ng-model="$parent.currentEditItem.strFirstName"</code> - and it will work.</p> <p>There's quite a lengthy conversation <a href="https://github.com/angular/angular.js/issues/1924" rel="nofollow">here</a> with a lot of possible workarounds and solutions that leads to an actual <a href="https://github.com/angular/angular.js/blob/master/CHANGELOG.md#breaking-changes-31" rel="nofollow">fix in release 1.2.0</a>.</p> <p>So long story short: update to at least AngularJS 1.2.0 and this will work.</p>