2017-07-03 165 views
0

我有兩個單選按鈕(他們沒有動態生成):角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個單選按鈕與相同的數據值相關聯,但順序依次遞減。我不知道這是你的意圖,但它看起來可能會導致問題。

下面是我的個人項目中的一些代碼,以便給您一個更好的想法。

@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({0}選擇器:'app', templateUrl:'../partials/app.html', styleUrls:['../css/app.css'], orderbydescending:boolean = true; })'如果是這樣,編譯時出現以下錯誤:'orderbydescending:boolean; }'不能分配給'Component'類型的參數。 對象字面量只能指定已知屬性,而'orderbydescending'不存在於類型'Component'中。「也許我誤解了。 (此外,單選按鈕的值確實是正確的,值是不同的,「+」v「 - 」。 – Boosman

+1

看看我添加到我的答案。這是一個語法的東西。你可能需要看更多的例子Angular代碼這是Angular人寫的一本很好的指南,也是我開始寫的。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 

有了這個第一個單選按鈕被選中,如果你不希望任何單選按鈕選擇分配給變量order by下降null。

orderbydescending = 'null; 
+0

似乎沒有工作。關聯的按鈕保持未選中狀態。一切都編譯好,沒有控制檯錯誤。 – Boosman

+0

你可以把一個笨蛋,那裏工作。誰是orderbydescending和它有什麼價值 – alehn96

+0

有趣的...它確實工作在蹲點。問題必須在別處。 – Boosman

1

如果orderbydescendingrecordStartDate是你的組件類的成員:

<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,因爲我不確切知道您使用的數據類型。您的數據可能會有更具體的數據類型。

+0

謝謝,Connors粉絲!這功能正常,但奇怪的是,按鈕仍*出現*未選中。這是否有意義/你知道如何解決它嗎? – Boosman

+1

在我自己的代碼中,我使用整數和布爾值的技術,它可以工作。如果與'ngModel'關聯的變量被初始化,默認檢查相應的單選按鈕(例如'[(ngModel)] =「orderbydescending」[value] =「5」',其中'public orderbydescending:number = 5;對於調試,您可以先嚐試(使用硬編碼值) – ConnorsFan

+1

順便說一句,在您編輯的文章中,您現在指定一個數組作爲單選按鈕的值,並且將orderbydescending的值也設置爲一個數組在代碼中,但這些數組不是同一個對象,所以它們不相同,你應該使用一個值作爲單選按鈕的'value'和'orderbydescending',而不是一個數組。一個布爾值或者一個字符串,類似的東西 – ConnorsFan