在我的.html页面中有一个下拉列表,
下拉列表:
<select ng-model="blisterPackTemplateSelected" data-ng-options="blisterPackTemplate as blisterPackTemplate.name for blisterPackTemplate in blisterPackTemplates">
<option value="">Select Account</option>
</select>
当用户选择一个值时,我想执行一个操作。因此,在我的控制器中,我做到了:
控制器:
$scope.$watch('blisterPackTemplateSelected', function() {
alert('changed');
console.log($scope.blisterPackTemplateSelected);
});
但是更改下拉列表中的值并不会触发代码:$scope.$watch('blisterPackTemplateSelected', function()
因此,我尝试了在select标记上使用:ng_change = 'changedValue()'
的另一种方法
和
函数:
$scope.changedValue = function() {
console.log($scope.blisterPackTemplateSelected);
}
但是blisterPackTemplateSelected
存储在一个子作用域中。我读到父作用域不能访问子作用域。
当下拉列表中的某个选定值发生更改时,执行某些操作的正确/最佳方法是什么?如果是方法1,我的代码哪里做错了?
发布于 2014-02-25 22:27:32
正如Artyom所说,您需要使用ngChange并将ngModel对象作为参数传递给ngChange函数
示例
<div ng-app="App" >
<div ng-controller="ctrl">
<select ng-model="blisterPackTemplateSelected" ng-change="changedValue(blisterPackTemplateSelected)"
data-ng-options="blisterPackTemplate as blisterPackTemplate.name for blisterPackTemplate in blisterPackTemplates">
<option value="">Select Account</option>
</select>
{{itemList}}
</div>
</div>
js:
function ctrl($scope) {
$scope.itemList = [];
$scope.blisterPackTemplates = [{id:1,name:"a"},{id:2,name:"b"},{id:3,name:"c"}];
$scope.changedValue = function(item) {
$scope.itemList.push(item.name);
}
}
发布于 2015-02-04 21:48:29
我可能会迟到,但我也有同样的问题。
我需要将id和name都传递到我的模型中,但是所有正统的解决方案都让我在控制器上编写代码来处理更改。
我用过滤器把它弄出来了。
<select
ng-model="selected_id"
ng-options="o.id as o.name for o in options"
ng-change="selected_name=(options|filter:{id:selected_id})[0].name">
</select>
<script>
angular.module("app",[])
.controller("ctrl",['$scope',function($scope){
$scope.options = [
{id:1, name:'Starbuck'},
{id:2, name:'Appolo'},
{id:3, name:'Saul Tigh'},
{id:4, name:'Adama'}
]
}])
</script>
“诀窍”在这里:
ng-change="selected_name=(options|filter:{id:selected_id})[0].name"
我使用内置的过滤器来检索id的正确名称。
这是一个带工作演示的plunkr。
发布于 2014-02-25 22:20:38
请为它使用ngChange
指令。例如:
<select ng-model="blisterPackTemplateSelected"
ng-options="blisterPackTemplate as blisterPackTemplate.name for blisterPackTemplate in blisterPackTemplates"
ng-change="changeValue(blisterPackTemplateSelected)"/>
并将新的模型值作为参数传递到控制器中:
ng-change="changeValue(blisterPackTemplateSelected)"
https://stackoverflow.com/questions/22016565
复制相似问题