首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在选定的ng选项更改时获取值

在选定的ng选项更改时获取值
EN

Stack Overflow用户
提问于 2014-02-25 22:06:14
回答 10查看 359.9K关注 0票数 115

在我的.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,我的代码哪里做错了?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 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);
  }       
}

现场示例:http://jsfiddle.net/choroshin/9w5XT/4/

票数 190
EN

Stack Overflow用户

发布于 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

票数 34
EN

Stack Overflow用户

发布于 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)"
票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22016565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档