[英]Changing Scope Variable in Controller Doesn't Change Variable in View
我在AngularJS中使用Select2,並且我想更改與控制器中的選擇框關聯的ng-model。 當前在我的plunkr示例中,每當我更新ng-model時,都會將select2框清除,就像將ng-model重置為空數組一樣。 如何將其設置為我可以先添加一個人,然后在控制器中啟動一個功能以向選擇框添加更多選擇,然后在框中同時看到原始選擇和新選擇?
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: 'nicole@email.com', age: 43, country: 'Colombia' }]);
};
$scope.person = {};
$scope.people = [
{ name: 'Adam', email: 'adam@email.com', age: 12, country: 'United States' },
{ name: 'Amalie', email: 'amalie@email.com', age: 12, country: 'Argentina' },
{ name: 'Estefanía', email: 'estefania@email.com', age: 21, country: 'Argentina' },
{ name: 'Adrian', email: 'adrian@email.com', age: 21, country: 'Ecuador' },
{ name: 'Wladimir', email: 'wladimir@email.com', age: 30, country: 'Ecuador' },
{ name: 'Samantha', email: 'samantha@email.com', age: 30, country: 'United States' },
{ name: 'Nicole', email: 'nicole@email.com', age: 43, country: 'Colombia' },
{ name: 'Natasha', email: 'natasha@email.com', age: 54, country: 'Ecuador' },
{ name: 'Michael', email: 'michael@email.com', age: 15, country: 'Colombia' },
{ name: 'Nicolás', email: 'nicolas@email.com', 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}} <{{$item.email}}></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>
$scope.$watch('multipleDemo',function(newValue,oldValue){
console.log("WATCH IN PROGRESS: "+newValue+" "+ oldValue);
});
這種固定的地雷。 我認為watch函數調用$ scope。$ apply綁定了新值。 我嘗試使用$ scope。$ apply起作用,但拋出錯誤。
希望能有所幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.