如何在AngularJs中获取select2值

时间:2015-05-31 17:58:48

标签: angularjs jquery-select2 angularjs-select2

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

2 个答案:

答案 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;