在ui-select中没有改变ng-model

时间:2014-09-19 15:11:31

标签: angularjs angular-ui ui-select2

我试图实现非常直接的目标:

<ui-select multiple ng-model="company.stack" theme="bootstrap">
    <ui-select-match>{$$item.name$}</ui-select-match>
    <ui-select-choices repeat="technology in technologies | filter: $select.search">
        <div ng-bind-html="technology.name | highlight: $select.search"></div>
    </ui-select-choices>
</ui-select>

更改对象时,更改不会反映在model.stack模型中。我尝试将其更改为$ parent.company.stack,但它仍然无法正常工作。我错过了什么? 我使用的是AngularJS v1.3.0-beta.17。

9 个答案:

答案 0 :(得分:33)

我遇到了与angular 1.3.14ui-select类似的问题以及绑定到数组的多选ui-select指令。我无法将所选项目绑定到ng-model中引用的数组。 我通过将selectedItems包装到对象中来实现它:

$scope.myObj = { selectedItems : []};
...

<ui-select ng-model="myObj.selectedItems" ...>
</ui-select>

selectedItems直接放在$scope上并不适用于我。

答案 1 :(得分:4)

不确定你是否已经解决了这个问题,但我也在努力解决这个问题&#34;基本用例&#34;今天,成为AngularJS和所有人的新手。我使用Angular 1.2.16和ui-select 0.8.3,虽然其他一切都有效,但我还是无法更新范围变量employee.selected

就我而言,问题是由于我对AngularJS的经验有限造成的。由于ng-model被设置为对象的属性(员工,在我的情况下),因此必须首先对其进行初始化。将$scope.employee = {};添加到控制器中解决了这个问题。

答案 2 :(得分:1)

初始化一个空对象就像@Rado一样,在这个结构中为我修复了它:

              <ui-select ng-model="reportFilterStatus.selected" title="Filtrar status">
                <ui-select-match placeholder="Filtra un estatus">
                    {{$select.selected}}
                </ui-select-match>
                <ui-select-choices repeat="status in filterStatusOptions | filter: $select.search">
                  <small ng-bind-html="status | highlight: $select.search"></small>
                  <span ng-bind-html="statuse | highlight: $select.search"></span>
                </ui-select-choices>
              </ui-select>

答案 3 :(得分:0)

我有类似的问题,似乎有角度-ui-select#0.7需要角度#1.2。*才能正常工作。

答案 4 :(得分:0)

我在Angular 1.2.16和ui-select 0.8.3上使用非常基本的用例进行了挣扎。虽然在我看来你的代码中有一个拼写错误,但在 ui-select-match 中。

对于某种标准属性名称{{$select.selected.your_property_here}},通常该属性看起来像$select.selected,所以双花括号和单个美元符号。可能这是你的问题吗?

答案 5 :(得分:0)

我通过在下一个div上 </ui-select>之后为该模型设置ng-init来解决这个问题。
示例:

<div class="col-md-6" ng-init="company-stack=null">

答案 6 :(得分:0)

对我来说,那是因为没有更新文本,我就像这样使用它:

$timeout(function () {
    $('#ownerdetail').trigger("create");
    $('#ownerdetail').delay(0).animate({opacity: 1}, 100);
    $('#selectdcontact').selectmenu().selectmenu('refresh'); //This solves it
    $('#selectdcust').selectmenu().selectmenu('refresh'); //This solves it
  });

答案 7 :(得分:0)

我对angularjs 1.4遇到类似的问题。在一个控制器中,ng-model值得到更新。但是在其他页面上使用相同的方法则行不通。以下是我的代码

工作:

var ctrl = this; 

ctrl.filters = {};

ctrl.filters.country = $rootScope.lUPro.RM_Country.split(",");

$(".country_select2").select2().val(ctrl.filters.country).trigger('change');

选择框为

$comint->CountrySelectBox(array("name"=>"country[]",  "class"=>"country_select2 form-control",  "id" => "req_country",  "ng-model" => "ctrl.filters.country","multiple" =>"multiple")); 

不起作用:

 var prectrl = this;

 prectrl.preferenceformdata = {};

  var pf = {};

  pf.country =  $rootScope.lUPro.RM_Country.split(",");

  prectrl.preferenceformdata = pf;
   $(".rm_country_select2").select2().val(prectrl.preferenceformdata.country).trigger('change');

选择框:


 $comint->CountrySelectBox(array("name"=>"country[]","class"=>"country_select2 form-control","id" => "req_country","ng-model"=>"prectrl.preferenceformdata.country","multiple" =>"multiple"));

所以要变通,我要用来更新ng-model变量中的值:

$(".country_select2").select2().val(prectrl.preferenceformdata.country)

.trigger('change').on("change",

function(e){

var values = $(this).val();

$scope.$apply(function(){prectrl.preferenceformdata.country = values;});

});

答案 8 :(得分:0)

这里有些人碰到了问题,但我会澄清。由于某种原因,ui-select要求ng-model是$ scope中的嵌套值。因此ng-model必须指向范围内的x.y而不是x或y。