添加一个选项以Angular方式选择

时间:2015-10-29 11:31:14

标签: javascript jquery angularjs css3

我正在做一个有一些字段的应用程序,用户可以添加带有新(相同)字段的新行。 我需要让用户向option添加select。我知道如何在jQuery中制作,但我无法与Angular集成。如果您看到plnkr CODE

你可以看到有一个select,最后一个是“+”。当用户单击它时,应显示从哪里获取新选项的文本的输入。这是显示的代码,它应该更改类但它不起作用,因为输入类型始终是内联的:

  $(".new").on("click", function () {
var state = $(this).data('state');
state = !state;
if (state) {
    $("new-option").addClass("hide");
} else {
    $("new-option").removeClass("show");
}
$(this).data('state', state);

});

这是新选项的代码:

        <div class="new-option">
    <label> New Option </label>
    <input type="text" data-ng-model="food.newOption">
    <button onClick="add()">Add</button>
    <script language="JavaScript">
function add() {
var newOption = '<option value="lol">' + $scope.food.newOption + '</option>';
    $('.new').append(newOption);
}

有人可以帮我按“+”更改课程,并在新选项中添加填充的输入吗?

谢谢你的建议!

4 个答案:

答案 0 :(得分:1)

这是我已更新你的html和app.js的工作演示

DEMO

app = angular.module('Test', []);
app.controller('ProductController', function($scope,$http) {
  $scope.foods = [
    {
      "selectproduct": "",
      "Quantity1": "",
      "Quantity2": ""
    }
  ];

  $scope.options= ['0101003 - Min. Diet pesce 2 Scd' , '0101004 - Min. Maint pesce 4 Scm' , '0101115 - Min. Diet pesce 1.5 Scd']

  $scope.cloneItem = function () {
    var itemToClone = { "selectproduct": "", "Quantity1": "", "Quantity2": "" };
    $scope.foods.push(itemToClone);
  }

  $scope.removeItem = function (itemIndex) {
    $scope.foods.splice(itemIndex, 1);
  }

  $scope.add = function(food){

    $scope.options.push(food.newOption);
    food.newOption = '';

  }
});

答案 1 :(得分:0)

你错过了获得角度的范围,这就是你无法在列表中追加的原因..

你是这样做的 - 因为它是一个javascript方法,你无法正常获得角度范围。 此处无可用范围

  function add() {

        var newOption = "<option value='lol'>" + $scope.food.newOption + "     </option>";
            $('.new').append(newOption);

        }

尝试使用角度范围。

function add() {
      var $scope = angular.element($(".form-group")).scope();
    var newOption = "<option value='lol'>" + $scope.food.newOption + "</option>";
        $('.new').append(newOption);

    }

working pluckr

答案 2 :(得分:0)

首先,您应该在控制器中编写add()函数,如下所示:

app.controller('ProductController', function($scope,$http) {
  $scope.foods = [
    {
      "selectproduct": "",
      "Quantity1": "",
      "Quantity2": ""
    }
  ];

  $scope.add = function(newOption) {
      scope.selectOptions.push(newOption);
  }

  $scope.cloneItem = function () {
    var itemToClone = { "selectproduct": "", "Quantity1": "", "Quantity2": "" };
    $scope.foods.push(itemToClone);
  }

  $scope.removeItem = function (itemIndex) {
    $scope.foods.splice(itemIndex, 1);
  }
});

在html中你需要使用ng-click属性:

<button ng-lick="add(food.newOption)">Add</button>

要在angularJS中打印选项,您可以使用ng-options属性(您需要在控制器上的selectOptions var中设置其他(API加载?)选项):

<select ng-model="selectItem" ng-options="selectOption in selectOptions">
</select>

您可以在文档中找到有关此内容的更多信息:https://docs.angularjs.org/api/ng/directive/ngOptions

答案 3 :(得分:0)

ng-model 提供双向绑定。您需要做的就是使用.push()

在模型中添加元素