通过ng-change选择ng-object

Pat*_*ick 305 angularjs

给出以下select元素

<select ng-options="size.code as size.name for size in sizes " 
        ng-model="item.size.code" 
        ng-change="update(MAGIC_THING)">
</select>
Run Code Online (Sandbox Code Playgroud)

有没有办法让MAGIC_THING等于当前选定的大小,所以我要访问size.namesize.code在我的控制?

size.code会影响应用程序的许多其他部分(图像网址等),但是当item.size.code更新ng-model时,item.size.name需要更新面向用户的内容.我假设正确的方法是捕获更改事件并设置控制器内部的值,但我不确定我可以传递给更新以获取正确的值.

如果这完全是错误的方式,我很想知道正确的方法.

Mar*_*cok 480

而不是将ng-model设置为item.size.code,如何将其设置为size:

<select ng-options="size as size.name for size in sizes" 
   ng-model="item" ng-change="update()"></select>
Run Code Online (Sandbox Code Playgroud)

然后在您的update()方法中,$scope.item将设置为当前选定的项目.

无论需要什么代码item.size.code,都可以获得该属性$scope.item.code.

小提琴.

根据评论中的更多信息进行更新:

为您的选择模型使用一些其他$ scope属性,然后:

<select ng-options="size as size.name for size in sizes" 
   ng-model="selectedItem" ng-change="update()"></select>
Run Code Online (Sandbox Code Playgroud)

控制器:

$scope.update = function() {
   $scope.item.size.code = $scope.selectedItem.code
   // use $scope.selectedItem.code and $scope.selectedItem.name here
   // for other stuff ...
}
Run Code Online (Sandbox Code Playgroud)

  • 这是真的?似乎ng-change处理程序在更新ng-model之前被触发,因此尝试$ scope.item.size.code = $ scope.selectedItem.code可能并不总是为您提供更新的模型值.有没有人在使用ng-change时看到过? (14认同)
  • 猜猜没有什么能阻止你做这件事:`ng-model ="selectedItem"ng-change ="update(selectedItem)"` (6认同)
  • 把它放在你的`<select>`中:ng-init ="item = sizes [0]" (5认同)

小智 54

您还可以使用以下代码直接获取所选值

 <select ng-options='t.name for t in templates'
                  ng-change='selectedTemplate(t.url)'></select>
Run Code Online (Sandbox Code Playgroud)

的script.js

 $scope.selectedTemplate = function(pTemplate) {
    //Your logic
    alert('Template Url is : '+pTemplate);
}
Run Code Online (Sandbox Code Playgroud)

  • 这没有指定模型吗?我收到此错误:无法找到指令'select'所需的控制器'ngModel'! (29认同)
  • 这不起作用!ng-change无权访问ng-options中创建的临时变量(t). (22认同)
  • 根据文档,选择元素肯定需要ngModel.其他指令是可选的,但那个指令不是. (8认同)
  • 这回答了问题,而被接受的人提供了另一种选择 (5认同)

Dol*_*ita 15

你也试试这个:

<select  ng-model="selectedItem" ng-change="update()">
<option ng-repeat="item in items" ng-selected="selectedItem == item.Id" value="{{item.Id}}">{{item.Name}}</option>
</select>
Run Code Online (Sandbox Code Playgroud)

  • 如果您需要格式化值,此解决方案很好.仅使用Select方法我无法轻松地格式化值. (2认同)

abb*_*33f 7

如果Divyesh Rupawala的答案不起作用(将当前项目作为参数传递),请参阅onChanged()此Plunker中的功能.它正在使用this:

http://plnkr.co/edit/B5TDQJ