【发布时间】:2018-03-05 09:02:00
【问题描述】:
我刚刚开始使用 Angular 1.5.x 中的组件,并为表单上的选择框创建了一个 - 我将字段、列表和标签传递给组件,它创建了表单“部分”,包括标签和选择框的正确选项 - 到目前为止,一切都很好。
现在我想在 select 上实现一个 ng-change,所以我传入了我想要用于此的函数。我遇到的问题是该函数是用旧值而不是新值触发的。我可以看到该功能在实际更改之前触发。如果我将更改函数放在组件更改事件中,它会正确注册,但不使用传入的函数。
我在https://jsfiddle.net/7gd3m2k0/创建了一个精简的小提琴
<div ng-app="demoApp">
<div ng-controller="RoleController as ctrl">
<nac-select
field="ctrl.MemberRole.record.member"
list="ctrl.Lists.Member"
label="Member"
on-change="ctrl.MemberRole.changeMember();"></nac-select>
<div ng-bind="ctrl.MemberRole.record.member.name"></div>
</div>
</div>
angular.module('demoApp', [])
.component('nacSelect', nacSelect)
.controller('RoleController', roleController)
var nacSelect = {
bindings: {
field: '=',
list: '<',
label: '@label',
onChange: '&'
},
controller: function () {
var ctrl = this;
ctrl.change = function () {
alert(ctrl.field.name); //gives new selection
ctrl.onChange(); //gives previous selection
}
},
template: `
<label>{{$ctrl.label}}</label>
<select ng-model="$ctrl.field" ng-options="r as r.name for r in $ctrl.list" ng-change="$ctrl.change();">
<option value="">(Please Select)</option>
</select>
`
};
var roleController = function(){
var ctrl = this;
ctrl.Lists = {
Member: [
{id: 1, name: 'Fred Smith'},
{id: 2, name: 'Jenny Jones'},
{id: 3, name: 'Jane Doe'}
]
};
ctrl.MemberRole = {
record: {
member: null
},
changeMember: function(){
alert(ctrl.MemberRole.record.member.name);
}
};
};
我想我错过了一些简单的东西,但我想不通。感谢您的帮助
【问题讨论】:
标签: angularjs angularjs-components angularjs-ng-change