AngularJS导致textarea焦点丢失

时间:2016-01-27 21:25:47

标签: angularjs ckeditor textarea caret wakanda

我的网络应用已部署 1.3.7, 10.187175等......

当应用执行角度/ wakanda .save()时,textarea 光标位置通常会移至0,0

这种情况发生在

目前无法选择更新到当前版本的

.directive ('ckEditor', function () {
    return {
        require: '?ngModel',
        link: function($scope, $elm, attr, ngModel) {

            var config = {
                toolbar:[
                    { name: 'paragraph', items: [ 'NumberedList', 'BulletedList'] },
                    { name: 'clipboard', items: [ 'Cut', 'Copy', 'Paste', '-', 'Undo', 'Redo'] },
                    { name: 'insert', items: [ 'SpecialChar'] },
                    { name: 'editing', items: [ 'Scayt', 'Options', 'Dictionaries', 'Check Spelling'] }
                ]
            };//, 'PasteText', 'PasteFromWord'

            config.toolbarLocation = 'top';
            config.scayt_autoStartup = true;
            config.autoParagraph = true;
            config.title = false;
            config.tabSpaces = 4;


            var ck = CKEDITOR.inline ($elm[0], config);

            $scope.lastApply = new Date();
            $scope.lastSave = new Date();
            $scope.saveStoryTimeout = null;
            $scope.toHtml = false;

            if (!ngModel) return;

            ck.on('change', function( evt ) {
                console.log(new Date().toString().substring(16,24),'change');

                var words = evt.editor.getData();
                if(words) {

                    if($scope.saveStoryTimeout) {
                        clearTimeout($scope.saveStoryTimeout);
                    }
                    $scope.saveStoryTimeout = setTimeout(function () {$scope.saveStoryNow(null,'auto'); }, 1000 * 3);
                }
            });    

            ck.on('activeEnterModeChange', function() { console.log(new Date().toString().substring(16,24),'activeEnterModeChange'); } );
            ck.on('activeFilterChange', function() { console.log(new Date().toString().substring(16,24),'activeFilterChange'); } );
            ck.on('afterCommandExec', function() { console.log(new Date().toString().substring(16,24),'afterCommandExec'); } );
            ck.on('afterInsertHtml', function() { console.log(new Date().toString().substring(16,24),'afterInsertHtml'); } );
            ck.on('afterPaste', function() { console.log(new Date().toString().substring(16,24),'afterPaste'); } );
            ck.on('afterSetData', function() { console.log(new Date().toString().substring(16,24),'afterSetData'); } );
            ck.on('afterUndoImage', function(evt) { console.log(new Date().toString().substring(16,24),'afterUndoImage'); 

            } );
            ck.on('ariaEditorHelpLabel', function() { console.log(new Date().toString().substring(16,24),'ariaEditorHelpLabel'); } );
            ck.on('ariaWidget', function() { console.log(new Date().toString().substring(16,24),'ariaWidget'); } );
            ck.on('autogrow', function() { console.log(new Date().toString().substring(16,24),'autogrow'); } );
            ck.on('beforeCommandExec', function() { console.log(new Date().toString().substring(16,24),'beforeCommandExec'); } );
            ck.on('beforeGetData', function(evt) { console.log(new Date().toString().substring(16,24),'beforeGetData'); } );
            ck.on('beforeModeUnload', function() { console.log(new Date().toString().substring(16,24),'beforeModeUnload'); } );
            ck.on('beforeSetMode', function() { console.log(new Date().toString().substring(16,24),'beforeSetMode'); } );
            ck.on('beforeUndoImage', function(evt) { console.log(new Date().toString().substring(16,24),'beforeUndoImage'); } );
            ck.on('blur', function() { console.log(new Date().toString().substring(16,24),'blur'); 

            } );
            ck.on('change', function(evt) { console.log(new Date().toString().substring(16,24),'change'); 

            } );
            ck.on('configLoaded', function() { console.log(new Date().toString().substring(16,24),'configLoaded'); } );
            ck.on('contentDirChanged', function() { console.log(new Date().toString().substring(16,24),'contentDirChanged'); } );
            ck.on('contentDom', function() { console.log(new Date().toString().substring(16,24),'contentDom'); } );
            ck.on('contentDomInvalidated', function() { console.log(new Date().toString().substring(16,24),'contentDomInvalidated'); } );
            ck.on('contentDomUnload', function() { console.log(new Date().toString().substring(16,24),'contentDomUnload'); } );
            ck.on('customConfigLoaded', function() { console.log(new Date().toString().substring(16,24),'customConfigLoaded'); } );
            ck.on('dataFiltered', function() { console.log(new Date().toString().substring(16,24),'dataFiltered'); } );
            ck.on('dataReady', function(evt) { console.log(new Date().toString().substring(16,24),'dataReady');
                //$scope.restoreCursor(evt);
            } );
            ck.on('destroy', function() { console.log(new Date().toString().substring(16,24),'destroy'); } );
            ck.on('dialogHide', function() { console.log(new Date().toString().substring(16,24),'dialogHide'); } );
            ck.on('dialogShow', function() { console.log(new Date().toString().substring(16,24),'dialogShow'); } );
            ck.on('dirChanged', function() { console.log(new Date().toString().substring(16,24),'dirChanged'); } );
            ck.on('doubleclick', function() { console.log(new Date().toString().substring(16,24),'doubleclick'); } );
            ck.on('dragend', function() { console.log(new Date().toString().substring(16,24),'dragend'); } );
            ck.on('dragstart', function() { console.log(new Date().toString().substring(16,24),'dragstart'); } );
            ck.on('drop', function() { console.log(new Date().toString().substring(16,24),'drop'); } );
            ck.on('elementsPathUpdate', function() { console.log(new Date().toString().substring(16,24),'elementsPathUpdate'); } );
            ck.on('fileUploadRequest', function() { console.log(new Date().toString().substring(16,24),'fileUploadRequest'); } );
            ck.on('fileUploadResponse', function() { console.log(new Date().toString().substring(16,24),'fileUploadResponse'); } );
            ck.on('floatingSpaceLayout', function() { console.log(new Date().toString().substring(16,24),'floatingSpaceLayout'); } );
            ck.on('focus', function() { console.log(new Date().toString().substring(16,24),'focus'); 

            } );
            ck.on('getData', function(evt) { console.log(new Date().toString().substring(16,24),'getData');  } );
            ck.on('getSnapshot', function(evt) { console.log(new Date().toString().substring(16,24),'getSnapshot'); } );
            ck.on('insertElement', function() { console.log(new Date().toString().substring(16,24),'insertElement'); } );
            ck.on('insertHtml', function() { console.log(new Date().toString().substring(16,24),'insertHtml'); } );
            ck.on('insertText', function() { console.log(new Date().toString().substring(16,24),'insertText'); } );
            ck.on('instanceReady', function() { console.log(new Date().toString().substring(16,24),'instanceReady'); } );
            ck.on('key', function( evt) { console.log(new Date().toString().substring(16,24),'key: ' + evt.data.keyCode); $scope.lastKey =  evt.data.keyCode;} );
            ck.on('langLoaded', function() { console.log(new Date().toString().substring(16,24),'langLoaded'); } );
            ck.on('loadSnapshot', function() { console.log(new Date().toString().substring(16,24),'loadSnapshot'); } );
            ck.on('loaded', function() { console.log(new Date().toString().substring(16,24),'loaded'); } );
            ck.on('lockSnapshot', function() { console.log(new Date().toString().substring(16,24),'lockSnapshot'); } );
            ck.on('maximize', function() { console.log(new Date().toString().substring(16,24),'maximize'); } );
            ck.on('menuShow', function() { console.log(new Date().toString().substring(16,24),'menuShow'); } );
            ck.on('mode', function() { console.log(new Date().toString().substring(16,24),'mode'); } );
            ck.on('notificationHide', function() { console.log(new Date().toString().substring(16,24),'notificationHide'); } );
            ck.on('notificationShow', function() { console.log(new Date().toString().substring(16,24),'notificationShow'); } );
            ck.on('notificationUpdate', function() { console.log(new Date().toString().substring(16,24),'notificationUpdate'); } );
            ck.on('paste', function() { console.log(new Date().toString().substring(16,24),'paste'); } );
            ck.on('pluginsLoaded', function() { console.log(new Date().toString().substring(16,24),'pluginsLoaded'); } );
            ck.on('readOnly', function() { console.log(new Date().toString().substring(16,24),'readOnly'); } );
            ck.on('removeFormatCleanup', function() { console.log(new Date().toString().substring(16,24),'removeFormatCleanup'); } );
            ck.on('required', function() { console.log(new Date().toString().substring(16,24),'required'); } );
            ck.on('resize', function() { console.log(new Date().toString().substring(16,24),'resize'); } );
            ck.on('save', function() { console.log(new Date().toString().substring(16,24),'save'); } );
            ck.on('saveSnapshot', function(evt) { console.log(new Date().toString().substring(16,24),'saveSnapshot: ');

            } );
            ck.on('selectionChange', function() { console.log(new Date().toString().substring(16,24),'selectionChange');
            } );
            ck.on('setData', function() { console.log(new Date().toString().substring(16,24),'setData'); 
            } );
            ck.on('stylesSet', function() { console.log(new Date().toString().substring(16,24),'stylesSet'); } );
            ck.on('template', function() { console.log(new Date().toString().substring(16,24),'template'); } );
            ck.on('toDataFormat', function(evt) { console.log(new Date().toString().substring(16,24),'toDataFormat');  } );
            //ck.on( 'toHtml', function( evt) {
            //  //$scope.toHtml = true;
            //}, null, null, 15 );
            ck.on('toHtml', function() { console.log(new Date().toString().substring(16,24),'toHtml');
            } );
            ck.on('unlockSnapshot', function() { console.log(new Date().toString().substring(16,24),'unlockSnapshot'); } );
            ck.on('updateSnapshot', function() { console.log(new Date().toString().substring(16,24),'updateSnapshot'); } );
            ck.on('widgetDefinition', function() { console.log(new Date().toString().substring(16,24),'widgetDefinition'); } );

            ngModel.$render = function (value) {
                if($scope.story && $scope.story.Content) {
                    ck.setData($scope.story.Content);
                }
            };

            $scope.$on("$destroy",function() {
                CKEDITOR.instances[ck.name].destroy();
            });

        }
    };
})


    $scope.handleStorySaveCancel = function(action) {
    console.log('[StoryDetailCtrl] $scope.handleStorySaveCancel: start');

    if($scope.saveStoryTimeout) {
        clearTimeout($scope.saveStoryTimeout);
    }
    $scope.lastApply = new Date();

    if(action && action == 'save') {

        $scope.story.Content = CKEDITOR.instances.storyContent.getData();
        $scope.story.Headline = document.getElementById('headline').value;

        if( $scope.headline === $scope.story.Headline &&
            $scope.content === $scope.story.Content &&
            $scope.status === $scope.story.Status &&
            $scope.journalist === $scope.story.Journalist_ID &&
            $scope.editor === $scope.story.Editor_ID) {

            console.log('[StoryDetailCtrl] $scope.handleStorySaveCancel: $scope.storyOriginal === $scope.story');

            $state.go('story.list', {
                storyId : $stateParams.storyId,
                pubId : $stateParams.pubId
            });

        } else {

            $scope.story.$save().then(function(e){

                console.log('[StoryDetailCtrl] $scope.handleStorySaveCancel: $scope.story.$save().then: end');

                $state.go('story.list', {
                    storyId : $stateParams.storyId,
                    pubId : $stateParams.pubId
                });

            }, function (e) {
                console.log('[StoryDetailCtrl] $save failed ', e);
                var msg = $scope.msgParse(e);
                $scope.storyFindOneChanged({
                    storyId : $stateParams.storyId,
                    msg : msg
                });
                console.log('[StoryDetailCtrl] $scope.handleStorySaveCancel: $save failed : end');
            }); 
        }       


    } else if(action && action == 'cancel') {
        console.log('[StoryDetailCtrl] $scope.handleStorySaveCancel: cancel : end');

        $state.go('story.list', {
            storyId : '',
            pubId : ''
        });
    } else if(action && action == 'commit') {

        $scope.story.Content = CKEDITOR.instances.storyContent.getData();

        $scope.story.$save().then(function(e){

            console.log('[StoryDetailCtrl] $save e ', e);
            $scope.userMessage = 'saved';
            $scope.userMessageTimeout = setTimeout(function () {$scope.userMessageClear();}, 1000 * 5);
            console.log('[StoryDetailCtrl] $scope.handleStorySaveCancel: commit : end');

        }, function (e) {

            console.log('[StoryDetailCtrl] $save failed ', e);

            var msg = $scope.msgParse(e);
            $scope.storyFindOneChanged({
                storyId : $stateParams.storyId,
                msg : msg
            });
            console.log('[StoryDetailCtrl] $scope.handleStorySaveCancel: commit failed : end');
        });
    }
    console.log('[StoryDetailCtrl] $scope.handleStorySaveCancel: end');
};

0 个答案:

没有答案