角2:默认单选按钮选择
我有两个单选按钮(他们没有动态生成):角2:默认单选按钮选择
<input type="radio" name="orderbydescending" [(ngModel)]="orderbydescending" [value]="['+recordStartDate']">Ascending<br>
<input type="radio" name="orderbydescending" [(ngModel)]="orderbydescending" [value]="['-recordStartDate']">Descending
如何使默认选中的单选按钮中的一个?
谢谢!
编辑
按钮的价值观正在通过该配管(即不是一个组成部分,本身......不知道这是值得一提的?)。该应用程序非常简单,单选按钮只是硬编码到app.component。管道是否是初始化默认选中哪个单选按钮的正确位置?
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({name: 'orderBy', pure: false})
export class OrderByPipe implements PipeTransform {
static _OrderByPipeComparator(a:any, b:any):number{
if((isNaN(parseFloat(a)) || !isFinite(a)) || (isNaN(parseFloat(b)) || !isFinite(b))){
//Isn't a number so lowercase the string to properly compare
if(a.toLowerCase() < b.toLowerCase()) return -1;
if(a.toLowerCase() > b.toLowerCase()) return 1;
}
else{
//Parse strings as numbers to compare properly
if(parseFloat(a) < parseFloat(b)) return -1;
if(parseFloat(a) > parseFloat(b)) return 1;
}
return 0; //equal each other
}
transform(input:any, [config = '+']): any{
if(!Array.isArray(input)) return input;
if(!Array.isArray(config) || (Array.isArray(config) && config.length == 1)){
var propertyToCheck:string = !Array.isArray(config) ? config : config[0];
var desc = propertyToCheck.substr(0, 1) == '-';
//Basic array
if(!propertyToCheck || propertyToCheck == '-' || propertyToCheck == '+'){
return !desc ? input.sort() : input.sort().reverse();
}
else {
var property:string = propertyToCheck.substr(0, 1) == '+' || propertyToCheck.substr(0, 1) == '-'
? propertyToCheck.substr(1)
: propertyToCheck;
return input.sort(function(a:any,b:any){
return !desc
? OrderByPipe._OrderByPipeComparator(a[property], b[property])
: -OrderByPipe._OrderByPipeComparator(a[property], b[property]);
});
}
}
else {
//Loop over property of the array in order and sort
return input.sort(function(a:any,b:any){
for(var i:number = 0; i < config.length; i++){
var desc = config[i].substr(0, 1) == '-';
var property = config[i].substr(0, 1) == '+' || config[i].substr(0, 1) == '-'
? config[i].substr(1)
: config[i];
var comparison = !desc
? OrderByPipe._OrderByPipeComparator(a[property], b[property])
: -OrderByPipe._OrderByPipeComparator(a[property], b[property]);
//Don't return 0 yet in case of needing to sort by next property
if(comparison != 0) return comparison;
}
return 0; //equal each other
});
}
}
编辑2
所以在component.app.ts
我已经编辑我的export class AppComponent{
以下几点:
export class AppComponent {
artists = ARTISTS;
currentArtist: Artist;
orderbydescending = ['-recordStartDate'];
showArtist(item) {
this.currentArtist = item;
}}
这工作防止以前的条款错误,但实际上并没有选中单选按钮。它仍然看起来好像没有被选中 - 尽管它的功能就像它一样。这有意义吗?
如果你在使用2路绑定的Angular 2+中进行此操作,在使用此HTML的组件中,可以尝试初始化与输入相关联的值。
// in your component ts file
orderbydescending: boolean = true;
您可以使HTML保持不变。虽然,您似乎有2个单选按钮与相同的数据值相关联,但顺序依次递减。我不知道这是你的意图,但它看起来可能会导致问题。
下面是我的个人项目中的一些代码,以便给您一个更好的想法。
@Component({
selector: 'gmu-home-page',
templateUrl: './home-page.component.html',
styleUrls: ['./home-page.component.css']
})
export class HomePageComponent implements OnInit {
// here you would put your variables
myFlag: boolean = true;
constructor() { }
ngOnInit() {
}
}
在组件
radioValue = {valueAsc: 'Asc', valueDesc: 'Desc'} ;
orderbydescending = 'Asc';
试试这个,在模板中把这个
<input type="radio" name="radioGroup" [(ngModel)]="orderbydescending" [value]="radioValue.valueAsc">Ascending
<input type="radio" name="radioGroup" [(ngModel)]="orderbydescending" [value]="radioValue.valueDesc">Descending
有了这个第一个单选按钮被选中,如果你不希望任何单选按钮选择分配给变量order by下降null。
orderbydescending = 'null;
如果orderbydescending
和recordStartDate
是你的组件类的成员:
<input type="radio" name="order" [(ngModel)]="orderbydescending" [value]="+recordStartDate">Ascending<br>
<input type="radio" name="order" [(ngModel)]="orderbydescending" [value]="-recordStartDate">Descending
在:
@Component({
...
})
export class MyComponent {
public recordStartDate: any = ...
public orderbydescending: any = +recordStartDate;
...
}
如果你[value]
分配的单选按钮值相应的单选按钮将被选中上面显示的情况下,默认会检查升序单选按钮,因为orderbydescending
变量处于它专门设置为+recordStartDate
。
注:我的示例代码中的变量类型为any
,因为我不确切知道您使用的数据类型。您的数据可能会有更具体的数据类型。
谢谢,Connors粉丝!这功能正常,但奇怪的是,按钮仍*出现*未选中。这是否有意义/你知道如何解决它吗? – Boosman
在我自己的代码中,我使用整数和布尔值的技术,它可以工作。如果与'ngModel'关联的变量被初始化,默认检查相应的单选按钮(例如'[(ngModel)] =“orderbydescending”[value] =“5”',其中'public orderbydescending:number = 5;对于调试,您可以先尝试(使用硬编码值) – ConnorsFan
顺便说一句,在您编辑的文章中,您现在指定一个数组作为单选按钮的值,并且将orderbydescending的值也设置为一个数组在代码中,但这些数组不是同一个对象,所以它们不相同,你应该使用一个值作为单选按钮的'value'和'orderbydescending',而不是一个数组。一个布尔值或者一个字符串,类似的东西 – ConnorsFan
这是你的意思吗? '@Component({0}选择器:'app', templateUrl:'../partials/app.html', styleUrls:['../css/app.css'], orderbydescending:boolean = true; })'如果是这样,编译时出现以下错误:'orderbydescending:boolean; }'不能分配给'Component'类型的参数。 对象字面量只能指定已知属性,而'orderbydescending'不存在于类型'Component'中。“也许我误解了。 (此外,单选按钮的值确实是正确的,值是不同的,“+”v“ - ”。 – Boosman
看看我添加到我的答案。这是一个语法的东西。你可能需要看更多的例子Angular代码这是Angular人写的一本很好的指南,也是我开始写的。https://angular.io/tutorial – SaxyPandaBear
是的 - 你是对的!我是Angular的新手,我匆忙同时,我已经更新了我的问题,包括传递无线电值的管道,包括'orderbydescending = ['+ recordStartDate'];'在管道内 – Boosman