2017-05-01 37 views
0

我建立使用科爾多瓦6.5,離子3.1.1和MObileFirst基金會8.0(服務器混合移動應用程序用戶進行身份驗證後,單選按鈕之間進行切換:8.0.0.00-20170220-1900和Client SDK:8.0.2017033009)。我創建了使用離子的離子列表如下是/否單選按鈕:無法使用MFP 8.0

list.html

<form [formGroup]="myForm" (ngSubmit)="onSubmit(myForm.value)"> 
     <ion-list radio-group formControlName="wsQuestion1"> 
     <ion-item> 
      <ion-label>Yes</ion-label> 
      <ion-radio value="1"></ion-radio> 
     </ion-item> 
     <ion-item> 
      <ion-label>No</ion-label> 
      <ion-radio value="0"></ion-radio> 
     </ion-item> 
     </ion-list> 
     <button type="submit" >Submit</button> 
</form> 

下面是我使用的登錄代碼:

WLAuthorizationManager.login('UserLogin', data).then(
    () => {//success handler 
      this.openNextPage(); 
     }, 
    () => {//failure handler 
     console.log("Error handler"); 
     alert('ALERT_ERR_REQUEST_PROCESSING_FAILED'); 
     } 
    ); 

如果我從「菜單 - >列表」導航到此頁面,則可以在「是/否」之間切換,並且配給按鈕正在被選中。但是,如果我輸入用戶名/密碼,請單擊登錄,然後當我在認證後到達此頁面時,我無法在比率按鈕之間切換。

我已經創建了一個重現此場景的應用程序。你可以得到它here

做的,以重現以下幾點:

  1. 下載,解壓縮,然後導航到項目的根目錄
  2. 上的命令提示符在命令提示符下運行npm install
  3. 運行cordova platform add
  4. 運行ionic serve命令提示符
  5. 運行cordova run android
  6. 當設備上的應用程序打開,然後輸入(測試用戶名/密碼)
  7. 您可以嘗試點擊是/否按鈕。

下面是它的外觀到我的設備:

enter image description here

+0

刪除表單使單選按鈕正常工作。所以這個問題似乎與MFP沒有關係。我建議你提高這個離子。 –

+0

@ S.A.NortonStanley我已經與MFP一起解決了這個問題,他們正在調查它。他們說,他們已經在那裏複製了它的環境,他們應該儘快提供根本原因。對於你提到的點,相反,如果我刪除多功能打印機電話,然後一切正常。 –

+0

如此理想的情況是,在執行表單提交時發生這種情況,而不是MFP呼叫。我提交給我的休息終點,這與MFP無關,但我仍面臨同樣的問題。 –

回答

0

我改變的代碼登錄部分如下:

WLAuthorizationManager.login('UserLogin', data).then(
    () => {//success handler 
     console.log("is angular zone ",NgZone.isInAngularZone()); 
      this.ngZone.run(()=>{ 
      console.log("is angular zone ",NgZone.isInAngularZone()); 
      this.openNextPage(); 
     });   
     }, 
    () => {//failure handler 
     console.log("Error handler"); 
     alert('ALERT_ERR_REQUEST_PROCESSING_FAILED'); 
     } 
    ); 

有人表現得像這樣做的原因是因爲WLAuthorizationManager的「成功經理人」正在運行角度帶之外,這就是爲什麼變化不是得到檢測。

爲了解決這個問題,我把「openNextPage」方法的調用包裝成了「this.ngZone.run(() => { ... })」,它的工作非常完美。

1

問題是由於線程離子代碼時序。一個問題已經提出,可以在這裏找到:https://github.com/driftyco/ionic-native/issues/1547。作爲臨時解決方法,可以將2毫秒的小超時添加到函數「checkandupdateview」中,以確保正確更新視圖。

UPDATE 這個問題仍然與MFP無論離子是否接受無關。這是一個線程時間,它可以在任何插件不一定只有MFP的情況下發生。儘管如此,這裏還是一個解決方法,讓代碼只在離子型代碼中運行一個小超時。

將main.js(它將在構建文件夾中)中的「checkandupdateview」離子函數修改爲以下代碼片段。正如你可以看到它所做的那樣,它是爲離子視圖渲染添加一點點暫停。

function test2() 
{ 
    setTimeout(function(){ 
    }, 1); 
} 
/** 
* @param {?} view 
* @return {?} 
*/ 
function checkAndUpdateView(view) { 
    try{ 
    if(view.component.navCtrl._ids == 1 && view.component.navCtrl.id == "n4" 
    ) 
    { 
     test2(); 
    }    
    }catch(e){} 
    Services.updateDirectives(view, 0 /* CheckAndUpdate */); 
    execEmbeddedViewsAction(view, ViewAction.CheckAndUpdate); 
    execQueriesAction(view, 33554432 /* TypeContentQuery */, 268435456 /* DynamicQuery */, 0 /* CheckAndUpdate */); 
    callLifecycleHooksChildrenFirst(view, 1048576 /* AfterContentChecked */ | 
     (view.state & 1 /* FirstCheck */ ? 524288 /* AfterContentInit */ : 0)); 
    Services.updateRenderer(view, 0 /* CheckAndUpdate */); 
    execComponentViewsAction(view, ViewAction.CheckAndUpdate); 
    execQueriesAction(view, 67108864 /* TypeViewQuery */, 268435456 /* DynamicQuery */, 0 /* CheckAndUpdate */); 
    callLifecycleHooksChildrenFirst(view, 4194304 /* AfterViewChecked */ | 
     (view.state & 1 /* FirstCheck */ ? 2097152 /* AfterViewInit */ : 0)); 
    if (view.def.flags & 2 /* OnPush */) { 
     view.state &= ~2 /* ChecksEnabled */; 
    } 
    view.state &= ~1 /* FirstCheck */; 
} 

如果還存在問題,請回復。

謝謝!

+0

如果我添加超時,那麼應用程序在完成加載後似乎會被掛起,我甚至無法輸入用戶名和密碼。 –

+0

請在模擬器上運行它。該應用程序將掛起在設備上,就像超時很小,但它仍然會減慢設備上的進程,因爲此特定功能將被多次調用。這只是表明由於離子線時序不匹配而不是MFP登錄導致的實際問題。 – Keerthi

+0

同意,但如果我不使用MFP,那麼它可以正常工作。在我看來,MFP正以某種方式造成這種情況。此外,他們已經關閉了但你已經打開的評論,這不是他們的問題。 –

相關問題