我无法获得select2的值。 这是我的代码:
<select id="categoryId" class="category"
ng-model="selectedCategory"
ng-options="selectedCategories.name for selectedCategories in categories"
ng-change="selectedCategory()">
<option></option>
</select>
在我的控制器中,我写了这个:
.....
function initializeSelect2 (){
$category.select2({
allowClear: true
});
}
$scope.selectedCategory = function (){
console.log('selectCategory: '+ $scope.selectedCategory);
}
答案 0 :(得分:0)
对于4.0.0之前的Select2版本,建议删除Select2并使用{{3>}(不ui-select ),这是一个AngularJS原生版本的Select2。 Select2 4.0.0可以与AngularJS一起使用(尽可能多),因此不再需要使用ui-select。
这里的问题是DOM change
事件(由Select2触发)与AngularJS change
事件不同,这是您正在收听的事件。只要change
的值发生变化,就会触发AngularJS ng-model
事件,在您遇到这种情况时可能不会这样。
您的ng-model
中不包含点(.
),这意味着Angular无法轻松收听更改并且可能永远无法检测到这些更改。这就是为什么ng-change
处理程序可能不会被触发的一个容易解决的解释。
另一个原因可能是Select2在摘要周期中被半毁坏,这会使Select2的DOM在页面周围分成几部分,但事件处理程序不一定按预期工作。下拉不打开或关闭会很容易注意到这一点,所以我怀疑这可能不是问题所在。
答案 1 :(得分:0)
对于新来者,快速而肮脏的解决方案是用值替换属性ng值,并使用本机javascript获取值并将其分配给范围变量。
<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;