0

我无法获得 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);    
   }
4

2 回答 2

0

对于 4.0.0 之前的 Select2 版本,建议删除 Select2 并使用ui-select不是ui-select2),它是 Select2 的 AngularJS 原生版本。尽管 Select2 4.0.0 可以与 AngularJS 一起工作(尽可能多地),因此不再严格需要使用 ui-select。

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

您的ng-model其中不包含点 ( .),这意味着 Angular 将无法轻松地侦听更改,并且可能永远无法检测到它们。所以这是一个很容易解决的解释为什么ng-change处理程序可能不会被触发。

另一个原因可能是 Select2 在摘要循环中被破坏了一半,这将使 Select2 的 DOM 留在页面周围,但事件处理程序不一定按预期工作。下拉菜单不打开或关闭很容易引起注意,所以我怀疑这实际上可能不是问题。

于 2015-05-31T19:47:09.647 回答
0

对于新手来说,快速而肮脏的解决方案是将属性 ng-value 替换为 value 并使用原生 javascript 获取 value 并将其分配给范围变量。

<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;
于 2017-10-11T06:04:31.587 回答