Ionic2 使用MFP 8.0对用户进行身份验证后,无法在单选按钮之间切换 < P>使用科尔多瓦 6.5 < /强>,离子 3.1.1 < /强>和Mobile第一基础8(Server: >0.0.0.00 -20170220-1900 < /强>和客户端SDK: >0.0.2017039009)构建混合移动应用程序。我使用爱奥尼亚的离子列表创建了一个是/否单选按钮,如下所示:

Ionic2 使用MFP 8.0对用户进行身份验证后,无法在单选按钮之间切换 < P>使用科尔多瓦 6.5 < /强>,离子 3.1.1 < /强>和Mobile第一基础8(Server: >0.0.0.00 -20170220-1900 < /强>和客户端SDK: >0.0.2017039009)构建混合移动应用程序。我使用爱奥尼亚的离子列表创建了一个是/否单选按钮,如下所示:,ionic2,ibm-mobilefirst,Ionic2,Ibm Mobilefirst,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="

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>
如果我从“菜单-->列表”导航到此页面,则我可以在是/否之间切换,并选择定量按钮。但如果我输入用户名/密码,单击登录,那么当我在验证后到达此页面时,我无法在比率按钮之间切换

我已经创建了一个应用程序来重现这个场景。你可以得到它

执行以下操作以复制:

  • 下载、解压缩并导航到项目根目录
  • 在命令提示符下运行
    npm安装
  • 在命令提示下运行
    cordova platform add
  • 在命令提示下运行<代码>爱奥尼亚服务
  • 运行
    cordova运行android
  • 当应用程序在设备上打开时,然后输入(测试为用户名/密码)
  • 您可以尝试点击是/否按钮
  • 以下是它如何查看我的设备:


    问题是由于离子代码中的线程计时。出现了一个问题,可在此处找到:。作为一种临时解决方法,可以在函数“checkandupdateview”中添加2毫秒的小超时,以确保正确更新视图

    更新 无论爱奥尼亚是否接受,这个问题仍然与MFP无关。这是一个线程计时,也可能发生在任何插件上,而不一定只有MFP。尽管如此,这里还是有一个解决方法,可以让您的代码只在ionic代码中运行一个小的超时

    将main.js(将在build文件夹中)中的“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 */;
    }
    
    如果仍然存在问题,请回复


    谢谢

    我将代码的登录部分更改为:

    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的“成功处理程序”在Angular Zone之外运行,这就是为什么没有检测到更改


    为了解决这个问题,我将“openNextPage”方法的调用包装到“”中,然后它就工作得很好了。

    删除表单可以使单选按钮正常工作。因此,这个问题似乎与MFP无关。我建议你提出这个问题。@S.A.NortonStanley我已经向MFP提出了这个问题,他们正在调查。他们说,他们已经在那里的环境中复制了它,他们应该很快提供根本原因。对于您提到的这一点,相反,如果我删除MFP调用,那么一切都会正常工作。因此,理想情况下,在执行表单提交时会发生这种情况,而不是MFP调用。我向我的rest终点提交了一份与MFP无关的文件。我仍然面临同样的问题。我尝试了同样的问题,但没有面对这个问题。你能提供应用程序示例吗?我尝试了与MFP共享的相同示例来调试该问题。如果我添加超时,则应用程序在加载完成后似乎被挂起,我甚至无法输入用户名和密码。请在模拟器上运行它。应用程序将挂起在设备上,就好像超时时间很小一样,它仍然会减慢设备上的进程,因为这个特定的函数将被多次调用。这只是为了表明实际问题的发生是由于离子线程时间不匹配,而不是由于MFP登录。同意,但如果我不使用MFP,那么它工作正常。在我看来,MFP是造成这种情况的原因。此外,他们已经关闭了,但您打开了,并评论说这不是他们的问题。@PrerakTiwari请查找上面的更新,并更新它是否适合您。我不理解这段代码:view.component.navCtrl.\u id==1&&view.component.navCtrl.id==“n4”?
    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');
          }
        );