AngularJS,带有getter和setter的单选按钮

AngularJS,带有getter和setter的单选按钮,angularjs,angularjs-directive,angularjs-ng-repeat,Angularjs,Angularjs Directive,Angularjs Ng Repeat,我试图通过getter和setter让单选按钮控制外部对象的布尔属性 在下面的示例中,有多个人,但只有一个人可以快乐。其中一个已经很快乐了。我想通过单选按钮来控制哪一个是快乐的 因此,我创建了一个带有无线电输入的模板,但无法将其绑定到person.happy,因为我无权访问此属性(假设person是第三方库) 为了将某些内容绑定到输入,我创建了一个哑控制器,以提供一个默认值(Person值),并将更改传播到实变量(简而言之,调用setter)。我似乎不能把事情做好 var-app=angula

我试图通过getter和setter让单选按钮控制外部对象的布尔属性

在下面的示例中,有多个
,但只有一个人可以
快乐
。其中一个已经很快乐了。我想通过单选按钮来控制哪一个是快乐的

因此,我创建了一个带有无线电输入的模板,但无法将其绑定到
person.happy
,因为我无权访问此属性(假设
person
是第三方库)

为了将某些内容绑定到输入,我创建了一个哑控制器,以提供一个默认值(Person值),并将更改传播到实变量(简而言之,调用setter)。我似乎不能把事情做好

var-app=angular.module('app',[]);
//个人建造师;happy是私人会员
职能人员(姓名,isHappy){
var happy=isHappy;
this.name=名称;
this.getHappy=function(){return happy;}
this.setHappy=函数(值){happy=value;}
}
//在作用域中插入人员列表
app.controller('PeopleCtrl',函数($scope){
$scope.people=[
新人(“爱丽丝”,真的),
新人(“鲍勃”,假),
新人(“卡罗尔”,假)
];
});
//显示一个人+快乐控制器的模板
变量模板=[
'',
'',
“{{person.name}}是{{me.happy?}快乐的:“{sad”}}”,
''
].加入(“”);
//显示一个人的指令
应用指令('人',函数(){
返回{
限制:'E',
模板:humanTemplate,
范围:{
人:'='
},
controllerAs:“我”,
控制器:功能($scope){
var me=这个;
me.happy=$scope.person.getHappy();
me.toggle=函数(){
console.log(我很高兴);
$scope.person.setHappy(me.happy);
};
}
};
});

我认为(至少我从演示中看到)您使用单选按钮的目的不同

单选按钮在组中工作,每个按钮都共享了
ng型号
。在您的情况下,
human
指令有自己的范围,因此每个单选按钮都有自己的型号a.e.独立,这打破了单选按钮的概念和用法

更改为经典复选框
type=“checkbox”
,一切都将正常工作


我真的希望它们的行为像单选按钮一样,在任何给定时间只有一个被选中,这就是为什么它们共享其
名称
属性。如果我理解得很好,那么如果不在父控制器(如
PeopleCtrl
)中实现
toggle()
方法,我就无法拥有这种唯一性,无论我使用的是单选还是复选框?@GnxR
我真的希望它们像单选按钮一样,在任何给定时间只选中一个,这就是它们共享名称属性的原因。
它们都应该具有相同的
ng型号。因此,您可以在控制器中创建它并传递给指令