Select2 Tag Box
Select2 Tag Box Custom Widget
Survey.Survey.cssType = "bootstrap";
Survey.defaultBootstrapCss.navigationButton = "btn btn-green";
Survey.JsonObject.metaData.addProperty("checkbox", {name: "renderAs", default: "standard", choices: ["standard", "select2tagbox"]});


    var widget = {
    name: "select2tagbox",
    htmlTemplate: "<select multiple='multiple' style='width: 100%;'></select>",
    isFit : function(question) { 
        return question["renderAs"] === 'select2tagbox'; 
    },
    afterRender: function(question, el) {

var $el = $(el).find("select");

    var widget = $el.select2({
    tags: "true",
    theme: "classic"
    });
    $el.on('select2:unselect', function (e) {
    var index = (question.value || []).indexOf(e.params.data.id);
    if(index !== -1) {
    var val = question.value;
    val.splice(index, 1);
    question.value = val;
    }
    });
    question.choicesChangedCallback = function() {
    $el.select2({data: question.visibleChoices.map(function(choice) { return { id: choice.value, text: choice.text }; })});
    }
    $el.on('select2:select', function (e) {
    question.value = (question.value || []).concat(e.params.data.id);
    });
    var updateHandler = function() {
    $el.val(question.value).trigger("change");
    };
    question.valueChangedCallback = updateHandler;
    question.choicesChangedCallback();
    updateHandler();
    }


    ,
    willUnmount: function(question, el) {
    var $select = $(el).find("select").select2();
    $select.each(function(i,item){
    $(item).off('select2:select').select2("destroy");
    });
    }


    }
    Survey.CustomWidgetCollection.Instance.addCustomWidget(widget);


window.survey = new Survey.Model({
  questions: [
    {
      "type": "checkbox",
      "renderAs": "select2tagbox",
      "isRequired": true,
      "choicesByUrl": { "url": "https://restcountries.eu/rest/v1/all" },
      "name": "countries",
      "title": "Please select all countries you have been for the last 3 years."
    }
  ]
});
survey.onComplete.add(function(result) {
    document.querySelector('#surveyResult').innerHTML = "result: " + JSON.stringify(result.data);
});

survey.data = { countries: ['Andorra'] };

function onAngularComponentInit() {
    Survey.SurveyNG.render("surveyElement", { 
        model: survey 
    });
}
var HelloApp =
    ng.core
        .Component({
            selector: 'ng-app',
            template: '<div id="surveyContainer" class="survey-container contentcontainer codecontainer"><div id="surveyElement"></div></div> '})
        .Class({
            constructor: function() {
            },
            ngOnInit: function() {
                onAngularComponentInit();
            }
    });
document.addEventListener('DOMContentLoaded', function() {
    ng.platformBrowserDynamic.bootstrap(HelloApp);
});

<!DOCTYPE html>
<html>
<head>
    <title>Select2 Tag Box Custom Widget for plaform Angular2, SurveyJS Library Example</title>
    <script src="https://unpkg.com/jquery"></script>
    <script src="https://npmcdn.com/zone.js@0.8.17/dist/zone.js"></script>
    <script src="https://npmcdn.com/core-js/client/shim.min.js"></script>
    <script src="https://npmcdn.com/rxjs@5.0.0-beta.6/bundles/Rx.umd.js"></script>
    <script src="https://npmcdn.com/@angular/core@2.0.0-rc.5/bundles/core.umd.js"></script>
    <script src="https://npmcdn.com/@angular/common@2.0.0-rc.5/bundles/common.umd.js"></script>
    <script src="https://npmcdn.com/@angular/compiler@2.0.0-rc.5/bundles/compiler.umd.js"></script>
    <script src="https://npmcdn.com/@angular/platform-browser@2.0.0-rc.5/bundles/platform-browser.umd.js"></script>
    <script src="https://npmcdn.com/@angular/platform-browser-dynamic@2.0.0-rc.5/bundles/platform-browser-dynamic.umd.js"></script>
    <script src="https://surveyjs.azureedge.net/0.12.34/survey.angular.js"></script>
    <link rel="stylesheet" href="https://unpkg.com/bootstrap@3.3.7/dist/css/bootstrap.min.css">
    <link rel="stylesheet" href="./index.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.4/js/select2.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.4/css/select2.min.css" rel="stylesheet" />

</head>
<body>
    <ng-app></ng-app>
<div id="surveyResult"></div>

<script type="text/javascript" src="./index.js"></script>

</body>
</html>
.btn-green {
  background-color: #1ab394;
  color: #fff;
  border-radius: 3px;
}
.btn-green:hover, .btn-green:focus {
    background-color: #18a689;
    color: #fff;
}
.panel-footer {
    padding: 0 15px;
    border:none;
    text-align: right;
    background-color: #fff;
}