Изменение переменной области в контроллере не меняет переменную в представлении

Я использую Select2 с AngularJS и хочу изменить модель ng, связанную с полем выбора в контроллере. В настоящее время в моем примере с plunkr всякий раз, когда я обновляю ng-модель, поле select2 очищается, как если бы я сбрасывал ng-модель на пустой массив. Как мне установить его так, чтобы я мог сначала добавить человека, затем инициировать функцию в контроллере, чтобы добавить больше вариантов выбора в поле выбора, а затем увидеть как исходный выбор, так и новые варианты выбора в поле?

Plunkr

JS-контроллер

app.controller('DemoCtrl', function($scope, $http, $timeout) {
  $scope.addSomePeeps = function() {
    var peeps = angular.copy($scope.multipleDemo.selectedPeople)

    $scope.multipleDemo.selectedPeople = peeps.concat([{ name: 'Nicolás',   email: '[email protected]',    age: 43, country: 'Colombia' }]);
  };

  $scope.person = {};
  $scope.people = [
    { name: 'Adam',      email: '[email protected]',      age: 12, country: 'United States' },
    { name: 'Amalie',    email: '[email protected]',    age: 12, country: 'Argentina' },
    { name: 'Estefanía', email: '[email protected]', age: 21, country: 'Argentina' },
    { name: 'Adrian',    email: '[email protected]',    age: 21, country: 'Ecuador' },
    { name: 'Wladimir',  email: '[email protected]',  age: 30, country: 'Ecuador' },
    { name: 'Samantha',  email: '[email protected]',  age: 30, country: 'United States' },
    { name: 'Nicole',    email: '[email protected]',    age: 43, country: 'Colombia' },
    { name: 'Natasha',   email: '[email protected]',   age: 54, country: 'Ecuador' },
    { name: 'Michael',   email: '[email protected]',   age: 15, country: 'Colombia' },
    { name: 'Nicolás',   email: '[email protected]',    age: 43, country: 'Colombia' }
  ];

  $scope.multipleDemo = {};
  $scope.multipleDemo.selectedPeople = [$scope.people[5], $scope.people[4]];

});

HTML

<body ng-controller="DemoCtrl">

  <h3>Array of objects</h3>
  <ui-select multiple ng-model="multipleDemo.selectedPeople" theme="select2" ng-disabled="disabled" style="width: 800px;">
    <ui-select-match placeholder="Select person...">{{$item.name}} &lt;{{$item.email}}&gt;</ui-select-match>
    <ui-select-choices repeat="person in people | propsFilter: {name: $select.search, age: $select.search}">
      <div ng-bind-html="person.name | highlight: $select.search"></div>
      <small>
        email: {{person.email}}
        age: <span ng-bind-html="''+person.age | highlight: $select.search"></span>
      </small>
    </ui-select-choices>
  </ui-select>
  <p>Selected: {{multipleDemo.selectedPeople}}</p>

  <button ng-click="addSomePeeps()">Click me to add some specific peeps</button>

</body>

person thank_you    schedule 27.10.2014    source источник


Ответы (1)


$scope.$watch('multipleDemo',function(newValue,oldValue){
                console.log("WATCH IN PROGRESS: "+newValue+" "+ oldValue);
            });

Этакая стационарная мина. Я думаю, что функция просмотра вызывает $scope.$apply, которая связывает новое значение. Я попытался использовать $scope.$apply, что сработало, но выдало ошибку.

надеюсь, это поможет

person Asif Alamgir    schedule 13.11.2014