簡體   English   中英

AngularJS指令隔離范圍不更新父級

[英]AngularJS Directive Isolate Scope Not Updating Parent

我有一個帶有模式綁定2路的指令,當通過ng-click調用save()方法時,父作用域不會更新,除非我調用$ scope。$ apply()然后拋出$ apply進行中錯誤。

我正在使用ngResource,並且該事件有一個監聽器調用$ scope.model。$ save();

有解決辦法嗎? 或者我做錯了什么?

.directive('editable', function(){
    return {
        restrict: 'AE',
        templateUrl: '/assets/partials/editable.html',
        scope: {
            value: '=editable',
            field: '@fieldType'
        },
        controller: function($scope){

           ...

            $scope.save = function(){
                $scope.value = $scope.editor.value;
                $scope.$emit('saved');
                $scope.toggleEditor();
            };

        }
    };
})

UPDATE

看起來它畢竟更新了父節點,但是在摘要完成之前發射了一些內容。 我可以使用$ timeout強制它到堆棧的末尾,但感覺有點hacky。 有沒有更好的辦法?

$scope.$on('saved', function(){
    $timeout(function(){
        $scope.contact.$update();
    }, 0);
});

你怎么稱$ scope.save? 如果你使用其中一個angular指令,比如ng-click,angular會自動為你運行一個摘要周期,因此你不需要調用$ scope。$ apply()。 在內部,角度檢​​查在開始另一個循環之前是否已經在進行摘要,因此如果您使用其中一個內置指令,它將處理您正在進行的摘要問題。 例如,將它放在指令的模板中......

<button ng-click="save()">Save</button>

如果您需要從控制器或鏈接功能調用save,您可以進行一些破解以防止“正在進行摘要”錯誤。 使用$ timeout服務將調用推遲到調用堆棧的末尾...

$scope.save();
$timeout(function() {
    $scope.$apply();
}, 0);

我們將超時設置為0,因此沒有實際延遲,但這仍然足以將$ apply調用推送到當前調用堆棧的末尾,這允許正在進行的摘要首先完成並防止錯誤。 這並不理想,可能意味着您的設計存在更大的問題,但有時您只需要使其工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM