1

angularjs ディレクティブで選択リストを動的に作成する必要があります。ng-init と ng-options を二重引用符で囲み、 angular.element を使用して要素を作成し、id previewで div に追加します。コードは次のようになります

$('button').click(function() {
     var ng_select_str = '<div class="col-sm-8" ng-init="options=[1,2,3]">' +
                             '<select class="form-control" id="inventory-qq" ng-model="inventory.qq" ng-options="opt as opt for opt in options"></select>' +
                         '</div>';

     var element = angular.element(ng_select_str);
     $('#preview').append(element);
});

ただし、選択リストはオプション値なしでレンダリングされます (空の選択リスト)。この問題をどのように解決するのだろうか。

4

2 に答える 2

2

動的コンテンツを生成およびコンパイルできるようなロジックのディレクティブを用意することをお勧めします。

以下の簡単な例を参照してください。ただし、さらに作業が必要です。

var module = angular.module('testApp', [])
  .directive('test', function($compile) {
    return {
      restrict: 'E',
      replace: true,
      template: '<button ng-click="appendSelectBox()">add select box</button>',
      controller: function($scope, $element) {
        $scope.appendSelectBox = function() {
          var el = $compile('<div class="col-sm-8" ng-init="options=[1,2,3]"><select class="form-control" id="inventory-qq" ng-model="inventory.qq" ng-options="opt as opt for opt in options"></select></div>')($scope);
          $element.parent().append(el);
        };
      }
    };
  });

module.controller('crtl', function($scope) {})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="testApp" ng-controller="crtl">
  <test>text</test>

</div>

于 2014-09-24T19:25:14.287 に答える
0

要素をコンパイルする必要があります。

var elm = angular.element(ng_select_str);
elm = $compile(elm)(scope);
$('#preview').append(elm);

ディレクティブは次のようになります。

var module = angular.module('app', []);

module.directive('myWidget',
    ['$compile'
        function($compile) {
            return {
                restrict: 'AE',
                link: function(scope, element, attrs) {
                    var elm = angular.element(ng_select_str);
                    elm = $compile(elm)(scope);
                    $('#preview').append(elm);
                }
            };
        }
    ]);
于 2014-09-24T19:12:28.193 に答える