2017-07-03 10 views
0

私は(彼らは動的に生成されていない)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; 

} }

これは、以前の防止の観点から作品実際にはラジオボタンは選択されません。たとえそれが機能しているとしても、選択されていないように見えます。これは理にかなっていますか?

答えて

1

2ウェイ・バインディングでAngular 2+でこれを実行している場合、このHTMLが使用されているコンポーネントでは、入力に関連付けられた値の初期化を試すことができます。

// in your component ts file 
orderbydescending: boolean = true; 

あなたはHTMLをそのまま残すことができます。ただし、同じデータ値に関連付けられた2つのラジオボタンがあるようですが、orderbydescendingです。それがあなたの意図であるかどうかはわかりませんが、問題を引き起こす可能性があります。

私の個人的な側面のプロジェクトのコードは、あなたに良いアイデアを提供しています。あなたが任意のラジオボタンをしたくない場合は

@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() { 
    } 
} 
+0

これはこの意味ですか? @component({ セレクタ: 'app'、 templateUrl: '../partials/app.html'、 styleUrls:['../css/app.css']、 orderbydescending:boolean = true; }) 'そうなら、私はコンパイル時に次のエラーを受け取ります:' orderbydescending:boolean; } 'は' Component '型のパラメータに代入不可能です。 オブジェクトリテラルは既知のプロパティのみを指定することができ、 'orderbydescending'は 'Component'タイプに存在しません。おそらく私は誤解しています。 (また、ラジオボタンの値は本当に正しいです、値は異なっています "+" v " - "。 – Boosman

+1

私は自分の答えに何を加えたかを見てください。構文上のことです。 Angular code。これは、角度の人々によって書かれた素晴らしいガイドで、私はどのように始めたのですか?https://angular.io/tutorial – SaxyPandaBear

+0

あなたは正しいです!私はAngularの新しいブランドです。パイプラインの中で 'orderbydescending = ['+ recordStartDate'];'を含むパイプを含めるように質問を更新しました。 – Boosman

1

、チェックされているコンポーネント

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 

を置きます変数orderbydescending nullにassignを選択しました。

<input type="radio" name="order" [(ngModel)]="orderbydescending" [value]="+recordStartDate">Ascending<br> 
<input type="radio" name="order" [(ngModel)]="orderbydescending" [value]="-recordStartDate">Descending 

に:あなたは[value]とラジオボタンの値を割り当てた場合、適切なラジオボタンがチェックされます

@Component({ 
    ... 
}) 
export class MyComponent { 
    public recordStartDate: any = ... 
    public orderbydescending: any = +recordStartDate; 
    ... 
} 

orderbydescending = 'null; 
+0

動作していないようです。関連付けられたボタンはチェックされません。すべてがコンパイルされ、コンソールエラーはありません。 – Boosman

+0

プランナーを置くことができます。誰がorderbydescendingでどのような価値がありますか – alehn96

+0

興味深い...それはプランナーで動作します。問題は他の場所になければならない。 – Boosman

1

もしorderbydescendingrecordStartDateは、コンポーネントクラスのメンバーであります上の例の場合、変数がorderbydescendingであるため、デフォルトで昇順ラジオボタンがチェックされますそれは+recordStartDateに設定されています。

注:サンプルコードの変数は、使用しているデータの種類が正確にわからないため、anyです。あなたのデータはおそらくより特定のデータ型を持つでしょう。

+0

ありがとう、ConnorsFan!これは正しく機能しますが、奇妙なことに、ボタンはまだ*表示されていません。これは意味をなさないか、それを修正する方法を知っていますか? – Boosman

+1

私のコードでは、整数とブール値でこの手法を使用しています。 ''(ngModel)= "orderbydescending" [value] = "5" 'のように' ngModel'に関連する変数が初期化されると、対応するラジオボタンがデフォルトでチェックされます。 – ConnorsFan

+1

ちなみに、あなたの編集した投稿では、ラジオボタンの値として配列を代入し、 'orderbydescending'の値もに設定しました。コード内の配列ですが、これらの配列は同じオブジェクトではないため、等しくはありません。ラジオボタンの 'value'と配列ではなく' orderbydescending'の値を1つ使用してください。ブール値、文字列などの値を返します。 – ConnorsFan

関連する問題