AngularJS: Der übergeordnete Geltungsbereich wurde in der Richtlinie (mit isoliertem Geltungsbereich) nicht aktualisiert

Ich habe den folgenden Code, an dem auch gefummelt werden kannhttp://jsfiddle.net/garukun/u69PT/.

Aussicht:

<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);
    };
});

Grundsätzlich richte ich die Direktive mit einem isolierten Gültigkeitsbereich ein, in dem ich eine Eigenschaft (Schlüssel) aus dem übergeordneten Gültigkeitsbereich (pkey) in beide Richtungen binde und auch eine im Kontext aufzurufende Methode (parentUpdate) delegiere des übergeordneten Bereichs.

Jetzt möchte ich während eines ng-click-Ereignishandlers in der Direktive die parentUpdate-Methode aufrufen und darin etwas tun. Wenn ich diese Methode aufrufe, erwarte ich, dass das Modell meines übergeordneten Bereichs aktualisiert wurde. Aber in Wirklichkeit ist es das nicht und das ist es, was mich verwirrt.

Dies liegt wahrscheinlich an einigen fehlenden $ digest-Zyklen in der Mitte, da das Umbrechen des parentUpdate-Aufrufs mit $ timeout wie erwartet funktionieren würde.

Könnte jemand etwas Licht ins Dunkel bringen, was fehlt? Oder wie man parentUpdate richtig aufruft?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage