如何在AngularJs中获取select2值

如何在AngularJs中获取select2值,angularjs,jquery-select2,angularjs-select2,Angularjs,Jquery Select2,Angularjs Select2,我无法获取select2的值。 这是我的代码: <select id="categoryId" class="category" ng-model="selectedCategory" ng-options="selectedCategories.name for selectedCategories in categories"

我无法获取select2的值。 这是我的代码:

<select id="categoryId" class="category"            
                        ng-model="selectedCategory"
                        ng-options="selectedCategories.name for selectedCategories in categories"
                        ng-change="selectedCategory()">
                        <option></option>
                    </select>

对于4.0.0之前的Select2版本,建议删除Select2并使用(),这是Select2的AngularJS本机版本。Select2 4.0.0可与AngularJS配合使用(尽可能多),因此不再严格需要使用ui select

这里的问题是DOM
change
事件(由Select2触发)与您正在收听的AngularJS
change
事件不同。只要
ng model
的值发生更改,就会触发AngularJS
change
事件,在您的情况下,这可能不是您所期望的

您的
ng型号
中不包含点(
),这意味着Angular将无法轻松地听到更改,并且可能永远无法检测到更改。因此,这是一个很容易修复的解释,解释了为什么
ng更改
处理程序可能不会被触发


另一个原因可能是Select2在摘要循环中被破坏了一半,这将使Select2的DOM在页面中处于碎片状态,但事件处理程序不一定能按预期工作。如果下拉列表没有打开或关闭,这很容易被注意到,因此我怀疑这实际上可能不是问题。

对于新来者,快速而肮脏的解决方案是将属性ng value替换为value,并使用本机javascript获取值并将其分配给scope变量

<select id="categoryId" class="category"            
                    ng-model="selectedCategory"
                    ng-change="selectedCategory()">
                    <option ng-repeat="selectedCategories in categories" value="selectedCategories"></option>
</select>

您需要使用
ui-select2
,这是
select2
的角度版本。注意,ui-select2已被弃用,并且是为select2@~3.4编写的,可能无法使用select2@4.0
<select id="categoryId" class="category"            
                    ng-model="selectedCategory"
                    ng-change="selectedCategory()">
                    <option ng-repeat="selectedCategories in categories" value="selectedCategories"></option>
</select>
$scope.selectedCategory.name = document.getElementById('categoryId').value;