如何使用ng-options AngularJS将输入字段添加到特定的选择字段?

时间:2016-08-29 08:38:04

标签: javascript angularjs mongodb

我正在使用Angular和Node / Express / Mongo创建一个轮询应用程序,并且当您选择“我想添加自定义选项”时,我想添加一个自定义输入字段来添加选项。我正在使用ng-options来生成投票选项。

民意调查的HTML现在看起来像这样:(从数据库中检索轮询并添加到$ scope.poll.options:

<div class="container">
  <div class="panel panel-default">
    <div class="panel-body">
      <div class="row">
        <div class="col-md-6">
          <h2>
            {{poll.title}}
          </h2>
          <h5>
            Created by: {{poll.displayName}}
          </h5>
          <form>
            <div class="form-group">
              <label for="vote">I would like to vote for:</label>
              <select class="form-control" id="vote" ng-model="poll.vote" ng-options="item.option as item.option for item in poll.options">
              </select>
            </div>
            <div class="form-group" ng-show="userID === poll.userID">
             <br>
               <label for="vote">Vote with my own option</label>
               <input ng-model="poll.vote" placeholder="Your own option" class="form-control" type="text">
            </div>   
            <button type="submit" class="btn btn-primary" ng-click="votePoll(poll)">Vote</button>
          </form>
          </br>
        </div>
        <div class="col-md-6">
          <canvas id="myChart" width="400" height="400">
          </canvas> 
        </div>
      </div>
    </div>
  </div>
 </div>

投票附加到$ scope.poll.vote,我使用它来命中一个与API对话以更新数据库的EditPoll控制器。

如果您是自己轮询的登录用户+:您可以从下拉列表中选择一个自定义选项,并显示一个空白输入字段以添加选项。我无法弄清楚代码应该是什么,任何建议???

例如:

我想投票支持:

  • 选项1
  • 选项2
  • 选项3
  • 我想要一个自定义选项&gt;在
  • 下面显示一个空白输入字段

1 个答案:

答案 0 :(得分:1)

在这里,您可以使用监视功能将自定义下拉项目与特定文本输入字段绑定,我们可以动态更新下拉归档数据。

&#13;
&#13;
var app=angular.module("myApp",[]);

app.controller("FirstController",function($scope){
	
	
	$scope.items = [{
	  id: 'opt_1',
	  label: 'aLabel',
	  subItem: { name: 'aSubItem' }
	}, 
	{
	  id: 'opt_2',
	  label: 'bLabel',
	  subItem: { name: 'bSubItem' }
	}, 
	{
	  id: 'opt_custom',
	  label: 'I would like a custom option',
	  subItem: { name: 'bSubItem' }
	}];
	
  $scope.checkOptions=function(){
   // alert($scope.selected.id);
    if($scope.selected.id=='opt_custom'){
	$scope.$watch('custom', function(newValue, oldValue) {
		debugger;
		$scope.items[2].id='opt_custom_'+$scope.custom;
		$scope.items[2].label=$scope.custom;
	});
      }
    }
})
&#13;
<html ng-app="myApp">
<head>
<title>Simple App</title>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.6/angular.js"></script>
</head>
<body>
<div ng-controller="FirstController">


<select ng-change="checkOptions()" ng-options="item as item.label for item in items track by item.id" ng-model="selected"></select>

 <input ng-model="custom" placeholder="Your own option" class="form-control" type="text">
</div>

</body>
</html>
&#13;
&#13;
&#13;