Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度js指令后链接可以';t访问生成的元素id_Javascript_Angularjs_Ckeditor - Fatal编程技术网

Javascript 角度js指令后链接可以';t访问生成的元素id

Javascript 角度js指令后链接可以';t访问生成的元素id,javascript,angularjs,ckeditor,Javascript,Angularjs,Ckeditor,我有这个指示: /*html, enclosed in a ng-repeat directive*/ <textarea name="alternativaHtml" id="questao_alternativa_{{$index}}" data-ng-model="alternativa.TextoHtml" data-ck-editor></textarea> /*javascript*/ angular .module("fluxo_itens.dir

我有这个指示:

/*html, enclosed in a ng-repeat directive*/
<textarea name="alternativaHtml" id="questao_alternativa_{{$index}}" data-ng-model="alternativa.TextoHtml" data-ck-editor></textarea>

/*javascript*/
angular
    .module("fluxo_itens.directives")
    .directive('ckEditor', [function () {
            return {
                require: '?ngModel',
                link: {
                    "post": PostLink
                }
            };
        }]);

function PostLink($scope, elm, attr, ngModel) {
    var ck = CKEDITOR.replace(attr.id);

    ck.on('pasteState', function () {
        $scope.$apply(function () {
            ngModel.$setViewValue(ck.getData());
        });
    });

    ngModel.$render = function (value) {
        ck.setData(ngModel.$modelValue);
    };
}
/*html,包含在ng repeat指令中*/
/*javascript*/
有棱角的
.模块(“fluxo_itens.指令”)
.directive('ckEditor',[function(){
返回{
要求:“?ngModel”,
链接:{
“post”:PostLink
}
};
}]);
函数PostLink($scope、elm、attr、ngModel){
var ck=CKEDITOR.replace(属性id);
ck.on('pasteState',函数(){
$scope.$apply(函数(){
ngModel.$setViewValue(ck.getData());
});
});
ngModel.$render=函数(值){
ck.setData(ngModel.$modelValue);
};
}

问题是,当CKEDITOR尝试创建编辑器实例时,它找不到元素,该元素的id属性是按常规生成的。

只是猜测,但您可以尝试以下操作:

<textarea name="alternativaHtml" id="questao_alternativa_{{$index}}" data-ng-model="alternativa.TextoHtml" data-ck-editor editor-id="questao_alternativa_{{$index}}"></textarea>
PostLink

function PostLink($scope, elm, attr, ngModel) {
var ck = CKEDITOR.replace($scope.editorId);

ck.on('pasteState', function () {
    $scope.$apply(function () {
        ngModel.$setViewValue(ck.getData());
    });
});

ngModel.$render = function (value) {
    ck.setData(ngModel.$modelValue);
};
}

问题是CkEditor无法找到元素,因为DOM中没有设置元素的id。因此,我依赖jQuery设置de-element-DOM属性,以便CkEditor可以找到textarea。 我在PostLink函数中更改了这个

var ck = CKEDITOR.replace(attr.id);
为此:

$(elm).attr("id", attr.id).prop("id", attr.id);
var ck = CKEDITOR.replace(elm[0].id);

现在一切正常

它抛出:语法错误:标记“{”是表达式[questao_alternativa{{$index}}第21列的意外标记,从[{{$index}]开始.binding中存在键入错误
将其更改为
否,它继续不工作。CkEditor找不到元素。我得到:TypeError:无法读取undefinedI的属性“getEditor”。我没有在CkEditor.replace函数中使用elm[0]。id,因为它会返回我“questao_alternativa”{$index},是的,带有{$index}未编译
$(elm).attr("id", attr.id).prop("id", attr.id);
var ck = CKEDITOR.replace(elm[0].id);