Javascript AngularJS指令更新父级,迭代延迟

Javascript AngularJS指令更新父级,迭代延迟,javascript,angularjs,Javascript,Angularjs,我有这个指令,它使用隔离作用域 priceApp.directive("clickToEdit", function() { var editorTemplate = '<div class="click-to-edit">' + '<div ng-hide="view.editorEnabled">' + '{{value}} ' + '<a ng-click="enableEditor()"

我有这个指令,它使用隔离作用域

priceApp.directive("clickToEdit", function() {
    var editorTemplate = '<div class="click-to-edit">' +
        '<div ng-hide="view.editorEnabled">' +
            '{{value}} ' +
            '<a ng-click="enableEditor()">Edit</a>' +
        '</div>' +
        '<div ng-show="view.editorEnabled">' +
            '<input ng-model="view.editableValue">' +
            '<a ng-click="saveValue()">Save</a>' +
            ' or ' +
            '<a ng-click="disableEditor()">cancel</a>.' +
        '</div>' +
    '</div>';

    return {
        restrict: "A",
        replace: true,
        template: editorTemplate,
        transclude: true,
        scope: {
            value: "=clickToEdit",
        },
        link: function($scope,$element,$attrs) {
            $scope.view = {
                editableValue: $scope.value,
                editorEnabled: false
            };

            $scope.enableEditor = function() {
                $scope.view.editorEnabled = true;
                $scope.view.editableValue = $scope.value;
            };

            $scope.disableEditor = function() {
                $scope.view.editorEnabled = false;
            };

            $scope.saveValue = function() {
                $scope.value = $scope.view.editableValue;
                $scope.disableEditor();
                $scope.$emit('update');
            };
        }
    };
});
非常有趣的是$scope中的值。$on带有一个迭代返回。。。 若现在我把测试值1放在字段中,并从指令中调用save方法,我会得到旧值初始值,之后若我把测试2放在控制器中,我会得到文本1。
我想知道哪里不对

解决方案是使用$timeout进行黑客攻击

$scope.$on('update',function(){
    $timeout(function(){
        saveProduct($scope.product);
    }, 0);      
});
$scope.$on('update',function(){
    saveProduct($scope.product);
});
$scope.$on('update',function(){
    $timeout(function(){
        saveProduct($scope.product);
    }, 0);      
});