AngularJS: Родительская область не обновляется в директиве (с изолированной областью), двусторонняя привязка

У меня есть следующий код, который также может быть измененhttp://jsfiddle.net/garukun/u69PT/.

Посмотреть:

<div data-ng-app="testApp">
    <div data-ng-controller="testCtrl">
        <strong>{{pkey}}</strong>
        <span data-test-directive data-parent-item="pkey" 
            data-parent-update="update(pkey)"></span>
    </div>
</div>

JS:

var testApp = angular.module('testApp', []);

testApp.directive('testDirective', function ($timeout) {
    return {
        scope: {
            key: '=parentItem',
            parentUpdate: '&'
        },
        replace: true,
        template: '<div><p>{{key}}</p>' +
            '<button data-ng-click="lock()">Lock</button>' +
            '</div>',
        controller: function ($scope, $element, $attrs) {
            $scope.lock = function () {
                $scope.key = 'D+' + $scope.key;
                console.log('DIR :', $scope.key);

                // Expecting $scope.$parent.pkey to have also been
                // updated before invoking the next line.
                $scope.parentUpdate();
                // $timeout($scope.parentUpdate); // would work.
            };
        }
    };
});

testApp.controller('testCtrl', function ($scope) {
    $scope.pkey = 'golden';
    $scope.update = function (k) {
        // Expecting local variable k, or $scope.pkey to have been
        // updated by calls in the directive's scope.
        console.log('CTRL:', $scope.pkey, k);
        $scope.pkey = 'C+' + k;
        console.log('CTRL:', $scope.pkey);
    };
});

По сути, я устанавливаю директиву с изолированной областью, в которой я двусторонне связываю свойство (ключ) из родительской области (pkey), а также делегирую метод (parentUpdate) для вызова в контексте родительской области.

Теперь, во время обработки события ng-click в директиве, я хочу вызвать метод parentUpdate и сделать что-то внутри. Когда я вызываю этот метод, я ожидаю, что модель моего родительского контекста будет обновлена. Но на самом деле это не так, и это то, что меня озадачивает.

Вероятно, это связано с отсутствующими циклами $ digest в середине, поскольку перенос вызова parentUpdate с помощью $ timeout будет работать, как и ожидалось.

Может ли кто-то пролить свет на то, чего не хватает? Или как правильно вызывать parentUpdate?

Ответы на вопрос(2)

Ваш ответ на вопрос