Я генерирую динамически html-элемент на странице при событии drop с jquery. После его создания я компилирую метод $ compile для угловых js. Мой код jquery: -
$('#divcontainer').droppable({ //make icon image droppable.
drop: function(event, ui)
{
$('#droppable_video_cotainer').removeClass('col-lg-12 col-md-12 col-sm-12 col-xs-12').addClass('col-lg-7 col-md-7 col-sm-7 col-xs-12');
var id = ui.draggable.attr("id");
if(id == 'multiple_choice_question')
{
var div= '<div class="box box-mintgreen box-solid video-edit">';
div+='<div class="box-header with-border">';
div+= '<h3 class="box-title"><i class="fa fa-question-circle"></i> Quiz</h3>';
div+='<div class="box-tools pull-right">';
div+='<button class="btn btn-box-tool clickable" data-widget="remove" data-effect="fadeOut"><i class="fa fa-times"></i></button>';
div+='</div></div>';
div+='<div class="box-body">';
div+='<textarea style="width: 410px;" ng-model="videoCourseQuestions.mcss_question" rows="5"></textarea>';
div+='<a id="mcss_add_option" align="center" style="cursor:pointer"> +Add option</a></br>';
div+='<div id="addRdo" class="quiz-ans"> ';
div+='<ul class="mcss_option_list" id="mcss_option_list">';
div+='<li><input type="radio" id="mcq_option1" ng-model="videoCourseQuestions.mcss_option" ng-value="option1"><input type="text" id="mcq_option#1" class="option" ng-model="videoCourseQuestions.mcss_option_1" placeholder="Enter your Option 1"/></li>';
div+='<li><input type="radio" id="mcq_option2" ng-model="videoCourseQuestions.mcss_option" ng-value="option2"><input type="text" id="mcq_option#2" class="option" ng-model="videoCourseQuestions.mcss_option_2" placeholder="Enter your option 2"/></li>';
div+='<li><input type="radio" id="mcq_option3" ng-model="videoCourseQuestions.mcss_option" ng-value="option3"><input type="text" id="mcq_option#3" class="option" ng-model="videoCourseQuestions.mcss_option_3" placeholder="Enter your option 3"/></li>';
div+='<li><input type="radio" id="mcq_option4" ng-model="videoCourseQuestions.mcss_option" ng-value="option4"><input type="text" id="mcq_option#4" class="option" ng-model="videoCourseQuestions.mcss_option_4" placeholder="Enter your option 4"/></li>';
div+='</ul>';
div+='</div>';
div+='<p class="sub"><input type="button" id="mscc_question_submit" class="btn btn-danger" set-on-click value="Submit"> <input type="reset" ng-model="mcss_btnreset" class="btn btn-default" value="Cancel"> </p>';
div+='<ul class="box-footer">';
div+='<li><i class="fa fa-clock-o"></i> save at <span>05:55</span></li>';
div+='<li><i class="fa fa-pencil-square-o"></i> Update : <span>08:20</span></li>';
div+='</ul>';
div+='</div></div>';
$('#Droppable_container').html(div);
var $scope = angular.element('#Droppable_container').scope();
$scope.compileElement('#Droppable_container');
});
И compileElement углового метода определяется как: -
$scope.compileElement = function(element){
$compile(element)($scope);
};
Все работает нормально. Html генерируется отлично, и ng-click также работает нормально. Но в переключателях автоматически добавляется атрибут имени, такой как name = "004" и name = "005" всем переключателям и переключателям с выбранными. Почему атрибут name добавляется в переключатели?
Поскольку имя является обязательным атрибутом, без него радиокнопки не имеют никакого смысла. Они группируются в соответствии с их именем. См. Спецификации.
Обратите внимание, что ваш код трудно читать, неэффективен и нарушает угловые лучшие практики. Мой совет: если вы действительно хотите использовать и изучать угловые, прекратите использовать jQuery. Единственный раз, когда использование jQuery было бы в порядке в соответствии с лучшими рекомендациями, это когда вы пишете свои собственные директивы.
Угловое - это все о директивах. Исследуйте их, используйте их, пишите сами !
Например, вместо того, чтобы назначать строки строковой переменной div
(которые вы, вероятно, делаете в контроллере), используйте директиву и поместите все html в шаблон.
Возможно, это не будет важно для вас в это время, но как только ваше приложение будет усложняться, вы поймете, почему я так обеспокоен.