精华内容
下载资源
问答
  • 父窗体与子窗体之间的通信在之前文章讲解windows程序设计过程中,...window对象window对象是是BOM中其他所有对象的父对象,其很属性本身就是它的子对象。通俗理解当浏览器中每打开一窗口就会创建一window对...
    8948c00bc28c6dd0b6f21aabf8f2fd05.png

    父窗体与子窗体之间的通信

    在之前文章讲解windows程序设计过程中,我们曾描述了windows程序窗口之间通信与控制实现方法与过程,如窗体之间参数传递等。本文主要从Web程序开发前端JavaScript脚本语言角度对窗体之间的通信及控制进行说明。


    window对象

    window对象是是BOM中其他所有对象的父对象,其很多属性本身就是它的子对象。通俗理解当浏览器中每打开一个窗口就会创建一个window对象的实例。JavaScript程序语言可以通过该实例实现对窗体进行控制。window对象基本属性描述如下图:

    caeadf6ae6c754c4d9cbe50f58a02788.png

    window对象常用属性

    window对象常用属性描述如上图,其中与窗口参数传递与控制相关属性主要包括parent属性、opener属性及closed属性等。各属性描述如下:

    1、parent属性

    该属性是指包含当前窗口的父窗口,此处包含多用在框架结构中,框架页面是构成框架的各个子页面的parent。

    2、opener属性

    opener属性主要针对使用open方法打开的窗口,被打开的窗口即为子窗口,其父亲窗口为opener。

    3、closed属性

    该属性主要用于判断一个窗口是否被关闭,如被关闭则返回true逻辑值。

    4、screen属性

    该属性主要是指与终端浏览器尺寸相关值,主要包括屏幕的宽度、高度等。

    以上给出了window对象基本属性,除以上基本属性之外,JavaScript还提供了window对象常用操作方法,方法描述如下:

    76e530bd381ec8dc52ddac33ea68c7b2.png

    window对象常用方法

    window对象常用方法描述如上图所示,其中与窗口打开相关函数主要包括open方法、close方法等。说明如下:

    1、open()方法

    该方法主要用于实现打开一个窗口,并对打开窗口URL及相关属性进行设置。函数返回值为被打开窗口的标识。

    2、close()方法

    该方法主要用于实现关闭窗口,关闭窗口可以针对本身,也可以针对子窗口进行关闭操作。


    父子窗口通信

    web中的父子窗口主要是指打开的网页,子窗口为被打开的网页,打开者为父窗口。本文所指的父子窗口通信主要包括参数的传递与方法调用。描述如下:

    2667dfd74095845bb902a0879f92c818.png

    父窗口与子窗口通信

    父窗口与子窗口通信主要借助窗口句柄或者窗口标识实现,在获取句柄或者标识后可以使用方法与属性进行操作,下面我们对参数传递及方法调用进行实例分析与说明。

    1、父传子参数传递

    参数传递主要包括子窗口传父窗口或者父窗口传主窗口两类。为演示操作,我们在主窗口与子窗口中分别添加文本框用于接收数据。效果如下图所示:

    54d456d8f08c3ebf16bd4b81037db66a.png

    参数传递测试Demo

    参数传递测试Demo如上图,当父窗口点击发送数据到子窗口时,将子窗口中的文本框用于显示所发送的数据。该功能实现主要借助于主窗口在打开子窗口时获取子窗口的句柄即标识。然后根据子窗口句柄操作子窗口文本框设置值。实现核心代码如下:

    985d13c43a44634b7f29ea2bece35a62.png

    父窗口传递数据给子窗口

    父窗口传递数据给子窗口实现代码如上所示,主要借助childWind句柄获取子窗口的文本框设置其Value值。实现效果如下图:

    f7ed47a96b8449df55e21abcfd745979.png

    父传子实现窗口

    2、子传父参数传递

    子传父参数传递主要借助子窗口的opener属性获取主窗口,并设置主窗口文本字段值。在子窗口中为发送数据按钮编写onclick点击处理函数,函数如下:

    54c9124c3cd8906389ef8160b59ade7c.png

    子传父实现代码

    如上图通过opener属性获取父窗口句柄后可直接调用父窗口的getElementById获取其对话框并设置父窗口文本框的Value实现子向父亲传递参数。实现效果如下图:

    899540ec7b24d384c27d2182d4314408.png

    子传父功能实现

    3、命令操作的传递

    理论上将无论父窗口还是子窗口只要获取了对方的句柄即标识之后,就可以调用对方window窗体的方法执行操作。如父窗体关闭前可直接调用子窗体的close方法先关闭子窗体。实现代码如下:

    4814e08f193a6dd63168297787a825a0.png

    父窗体关闭子窗体

    以上给出JavaScript开发过程中父窗口与子窗口通信的实现及相关案例代码演示,如需完整代码请关注并私信。在测试过程中通过父窗口获取子窗口并进行操作在Chrome浏览器下受到跨源请求规范约束无法执行代码,其他浏览器均可正常执行。


    本头条号长期关注编程资讯分享;编程课程、素材、代码分享及编程培训。如果您对以上方面有兴趣或代码错误、建议与意见,可在评论区回复。更多程序设计相关教程及实例分享,期待大家关注与阅读!相关文章链接如下:

    前端设计-JavaScript实现Node节点的遍历

    Web前端设计-常用CSS选择器说明及实例分析(二)

    Web前端设计-常用CSS选择器说明及实例分析(一)

    展开全文
  • 在业务逻辑中,可能会有点多个页面都需要用到同一个组件,为了避免重复的代码,可以将数据定义在父组件里,然后再每一个子组件里获取到父组件传递过来的值。 在组件中,使用选项props来声明需要从父级接收的数据,...

    如何使用props进行父子组件之间的传值
    在业务逻辑中,可能会有点多个页面都需要用到同一个组件,为了避免重复的代码,可以将数据定义在父组件里,然后再每一个子组件里获取到父组件传递过来的值。
    在组件中,使用选项props来声明需要从父级接收的数据,props的值可以是两种,一种是字符串数组,一种是对象。
    ( props中生命的数据与组件data函数return的数据主要区别就是props的来自父级,而data中的是组件自己的数据,作用域是组件本身,这两种数据都可以在模板template及计算属性computed和方法methods中使用。)
    1、传递父级动态数据
    有时候,传递的数据不是写死的,而是来自父组件的动态数据,这时可以使用指令v-bind来动态绑定props的值,当父组件的数据变化时,也会传递给子组件。
    示例小demo:
    (1)app.vue文件

    <div id="app">
         <Header />
         <Body :books="books"/>
         <Footer />
      </div>
    

    这里动态绑定book,下面的books的数组是定义在父组件app,vue里定义,但是在子组件里进行使用。

     books:[
                {name:'vue.js',price:'22',show:false},
                {name:'js',price:'222',show:false},
                {name:'html',price:'32',show:false},
                {name:'css',price:'232',show:false}
          ]
    

    这里动态绑定
    (2)Body.vue文件

    <ul v-for="(book,index) in books" :key="index">
        <li @mouseover="book.show = !book.show">
          书名:{{book.name}}
          <div v-show="book.show">价格:{{book.price}}</div>
        </li>
      </ul>
    

    这里遍历父组件里传过来的值,然后显示出来;并且写了一个方法就是鼠标滑过的时候显示价格。

    export default {
      name:'Body',
      props:['books']
      }
    

    这里在props里面是父组件里传过来的数据。
    2、传递父级动态数据——直接传递,不使用v-bind
    如果要直接传递数字、布尔值、数组、对象,而且不使用v-bind,传递的仅仅是字符串,就会存在问题,通过下面两个demo来对比一下。
    (1)子组件里

    <div class='container'>
      <h1>{{message}}</h1>
      <h2>{{message.length}}</h2>
    </div>
    
     props:['message'],
    

    (2)父组件里
    第一种情况——没有进行v-bind进行绑定

    <Header message="[1,2,3]"/>
    

    运行结果:
    在这里插入图片描述
    第二种情况——进行v-bind进行绑定

     <Header :message="[1,2,3]"/>
    

    运行结果:
    在这里插入图片描述
    渲染后,使用v-bind绑定的长度是3,没有使用v-bind绑定的长度是7.

    3、单向数据流
    业务中经常需要两种改变prop的情况:
    1、一种是父组件传递初始值进来,子组件将它作为初始值保存下来,在自己的作用域下可以随意使用和修改。这种情况可以在组件data内再声明一个数据,引用父组件的prop。例:
    在父组件里:

    <Footer :init-count="1"/>
    

    在子组件里:

    <div class='container'>
      <h1>{{count}}</h1>
      <button @click="sonBtn">修改</button>
    </div>
    
    export default {
    	  name:'Footer',
    	  props:['initCount'],
    	  data(){
    	   return {
    	      count:this.initCount
    	   }
    	  },
    	  methods:{
    	    sonBtn:function(){
    	      this.count = 10;
    	      console.log('子组件里的count'+this.count);
    	    }
    	  }
    }
    

    运行结果:
    在这里插入图片描述
    在这里插入图片描述

    2、第二种情况是prop作为需要被转变的原始值传入,这种情况使用计算属性就可以了。
    父组件里:

    <Footer :width="100"/>
    

    子组件里:

    <div :style="style" class="son">我是子组件</div>
    
    export default {
    	  name:'Footer',
    	  props:['width'],
    	  computed:{
    			   style:function(){
    			      return{
    			        width:this.width+'px'
    			      }
    			   }
    	  }
    }
    

    注意:在JavaScript中对象和数组是引用类型,指向同一个内存空间,所以props是对象和数组时,在子组件内改变是会影响父组件的。

    3、数据验证
    上面所介绍的props选项的值都是一个数组,但是当prop需要验证时,就需要写对象语法。
    一般当你的组件需要提供给别人使用时,推荐都进行数据验证,比如某个数据必须是数字类型,如果传入字符串,就会在控制台弹出警告。
    目前数据验证还不是理解的特别透彻,就先放示例了,等后面用到了,熟悉了,再进行补充总结。

    参考文献:《vue,js实战》

    展开全文
  • Android成长(二)——两个页面交互

    千次阅读 2015-11-21 12:08:31
    之前,我们讲到了学习Android需要的开发环境的搭建,今天我们来做一小例子,来看一下Android是如何实现页面之间的参数传递的。 从中我们学到了intent和bundle对象,他们是参数传递的核心对象。在代码中我们次...

          之前,我们讲到了学习Android需要的开发环境的搭建,今天我们来做一个小例子,来看一下Android是如何实现页面之间的参数传递的。

    一、前端页面配置

    1、activity_main页面

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.example.intent.MainActivity" >
    
        <!-- 设置控件宽度 -->
        <!-- 设置控件高度 -->
        <!-- 设置控件文本显示,读取values/strings.xml中的配置 -->
        <TextView
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:text="@string/hello_world" 
             />
    
        <Button
            android:id="@+id/btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Go"  />
    
    </RelativeLayout>
    

    2、second页面

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.example.intent.MainActivity" >
    
        <TextView
            android:id="@+id/secondtxt"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="second" />
    
        <Button
            android:id="@+id/secondbtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Back"  />
    
    </RelativeLayout>
    

    3、配置AndroidManifest.xml

    <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name=".MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
            <activity 
                android:name=".SecondActivity"
                android:label="@string/app_name">
    
            </activity>
    
        </application>

    二、activity编写

    1、MainActivity类

    public class MainActivity extends Activity {
    
        //声明按钮控件
        private Button mainButton=null;
        //本页面传递时的按钮btn的标志码
        private final static int request_Code=11;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //设置显示的页面
            setContentView(R.layout.activity_main);
            //根据配置的按钮id找到按钮控件
            mainButton=(Button)findViewById(R.id.btn);
            //为按钮设置单击的事件监听器
            mainButton.setOnClickListener(listener);
        }
    
        //单击的事件监听器
        private OnClickListener listener=new OnClickListener() {
    
            @Override
            public void onClick(View arg0) {
                //Intent是系统各组件之间进行数据传递的数据负载者,即通信使者
                Intent intent=new Intent();
    
                //设置页面转向
                intent.setClass(MainActivity.this,SecondActivity.class);
                //设置传递参数
                intent.putExtra("str", "你好");
                //startActivity(intent);不需要接收返回值时使用
                //接收返回值,request_Code代表当前按钮btn的请求吗
                startActivityForResult(intent, request_Code);
            }
        };
    
        //重写接收返回值得方法
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            //如果请求码等于按钮btn的标志码,则继续处理
            if(requestCode==request_Code) {
                //如果结果码,等于second页面中按钮btnButton的标志码,则继续处理
                if(resultCode==SecondActivity.result_Code)
                {
                    //从传回的数据中取得bundle
                    Bundle bundle=data.getExtras();
                    //得到返回值
                    String string=bundle.getString("back");
                    //显示返回值
                    Toast.makeText(MainActivity.this, string, Toast.LENGTH_LONG).show();
                }
            }
    
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
            if (id == R.id.action_settings) {
                return true;
            }
            return super.onOptionsItemSelected(item);
        }
    }

    2、SecondActivity 类

    public class SecondActivity extends Activity {
    
        //声明控件
        private TextView textView;
        private Button btnButton=null;
        //此页面按钮btnButton的标志码
        public final static int result_Code=1;
    
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //调用并显示页面2
            setContentView(R.layout.second);
            //得到intent通信使者
            Intent intent=getIntent();
            //得到bundle,存放数据的对象,类似于map
            Bundle bundle=intent.getExtras();
            //得到传过来的数据
            String str=bundle.getString("str");
    
            //得到textView控件
            textView=(TextView)findViewById(R.id.secondtxt);
            //显示传过来的数据
            textView.setText(str);
    
            //得到按钮,设置监听器
            btnButton=(Button)findViewById(R.id.secondbtn);
            btnButton.setOnClickListener(listener);
        }
    
        //单击事件监听器
        private OnClickListener listener=new OnClickListener() {
    
            @Override
            public void onClick(View arg0) {
                //创建通信使者
                Intent intent =new Intent();
                //设置返回信息
                intent.putExtra("back", "我崔晓光又回来了!!");
                //设置返回码和通信使者
                setResult(result_Code,intent);
                //完成,关闭当前页面并返回
                finish();
            }
        };
    }

    总结:

          这里我们学会了在不同的页面之间传递参数。从中我们学到了intent和bundle对象,他们是参数传递的核心对象。在代码中我们多次使用到了标志码——requestCode和resqonseCode,我们要充分理解这两个码,其实就是对一个按钮的标志,根据这个我们可以处理同一个页面不同按钮的不同请求。通过这个小例子,希望大家对android开发有一定了解,为以后开发大型项目打好基础。

    展开全文
  • 浏览器的请求发送给组件1,组件1经过一些处理之后,将request对象和response对象传递给组件2,然后交由组件2继续处理,(当然,也可以继续向其他组件进行传递)最后输出响应。这个传递的整个过程我们称之为“转发”...

    转发:RequestDispatcher.forward,话不多说直接上图:
    转发原理示意图
    结合图,我们可以进行分析:
    浏览器的请求发送给组件1,组件1经过一些处理之后,将request对象和response对象传递给组件2,然后交由组件2继续处理,(当然,也可以继续向其他组件进行传递)最后输出响应。这个传递的整个过程我们称之为“转发”!
    并且,由图中我们不难看出,整个过程中只涉及一次浏览器和服务器之间的“请求-响应”,所以转发的过程中的组件是共享一个请求和响应对象的。
    转发的意义在于可以实现组件之间的“分工”。在基于MVC,多层结构的web应用中,经常需要多个组件协同完成一次“请求-响应”工作。
    那么,转发过程,有什么需要注意的呢?

    • 转发只能在同一个应用的组件之间进行,不可以转发给其他应用的地址
    • 转发的地址可以使用“相对地址”的方式,也可以使用“绝对地址”的方式。但需要注意的是:用绝对地址的方式的时候,应该从应用名后开始。

    重定向:HttpServletResponse.sendRedirect,直接上图:
    重定向原理示意图
    结合图,我们可以进行分析:
    浏览器向某组件发出请求信息,组件向浏览器发回一个重定向响应信息,该响应信息不包含具体的数据内容,只是在响应头信息中包含了需要重定向到的地址信息,该地址可以是任何有效的URL。浏览器收到该重定向响应后会自动的向响应信息头中所只是的地址发出请求。
    整个重定向过程中涉及至少两次“请求-响应”


    说了那么,我们对转发和重定向的区别进行一个总结

    1. 在转发中,只涉及一次浏览器和服务器之间的“请求-响应”,且转发过程中的组件共享同一个请求和响应对象。而重定向中,浏览器至少做了两次请求,且重定向过程中组件各自使用各自的请求和响应对象,属于两个独立的访问请求和响应的过程。
    2. 转发是服务器行为,而重定向属于客户端行为。
    3. 转发浏览器的URL的地址栏不改变,重定向的URL的地址栏改变。
    4. 转发的速度快,且必须是在同一台服务器下完成,而重定向的速度慢,因为重定向要几次经过客户端,且重定向可以在多台不同服务器下完成。
    5. 转发不会执行转发后的代码,转发2次跳转之间传递的信息不会丢失,而重定向2次跳转,信息会丢失,故重定向会执行重定向后的代码。
    6. 转发的方法只能将请求转发给同一个web应用的组件,RequestDispatcher对象时指定的相对URL以“/”开头,它是相对于当前的WEB应用的根目录。而重定向方法的相对URL以“/”开头,它是相对于整个WEB站点的根目录。
    7. 转发,会在本页面代码执行转发语句后,即跳转到指定的页面执行其他代码,执行完毕后,返回接着执行转发语句后的代码。而重定向,会在当前页面代码执行完毕后,跳转到指定的页面执行其他代码。

    为了便于理解,我举一个“借钱”的例子:
    RequestDispatcher.forward方法在服务器内部将请求转发给另一个资源,浏览器只知道发出了请求,并得到了响应的结果,并不知道在服务器程序内部发生了转发行为。
    好比:一个叫“浏览器”的人写信找小明借钱,小明没有钱,于是小明找到了小红借了一些钱,甚至可以再加上自己的一些钱,然后再将这些钱汇给“浏览器”。由此,我们不难分析出,“浏览器”只发出了一次请求和收到了一次回复,他只知道从小明那里借到了钱,并不知道有一部分钱出自小红之手。
    而重定向就不一样了,他的过程好比一个叫“浏览器”的人写信找小明借钱,小明回信说没有钱,让“浏览器”去找小红借钱,并把小红现在的通信地址告诉了“浏览器”。于是,“浏览器”就按小明提供的通信地址给小红写了封信借钱,小红收到信后就把钱汇给了“浏览器”。
    由此可见,“浏览器”一共发出了两次信并且收到了两次回复,且“浏览器”也知道他得到的钱来自于“小红”之手。


    那么,对于转发和重定向,我们到底该如何选择呢?

    1. 重定向的速度比转发的速度慢,因为浏览器还需要发出新的请求,所以如果在使用转发和重定向都无所谓的情况下,建议使用转发。
    2. 因为转发只能访问当前的web应用程序,所以不同web应用程序之间的访问,特别是需要访问到另外一个web站点上的资源的情况,这个时候只能使用重定向。
    3. 另外,重定向还有一个应用场景:避免在用户重新加载页面时两次调用相同的动作。比如,在提交产品表单时,执行保存的方法将会被调用,并执行相应的动作,这在一个真实的应用程序中,很有可能将表单中所有的信息加入到数据库中,但是如果在提交表单后,重新加载页面执行保存的方法就有可能被调用,同样的产品信息就将可以再次被添加。那么,为了避免这种情况,提交表单后,你可以将用户重定向到一个不同的页面,这样,这个网页任意重新加载都没有副作用!
    展开全文
  • 【Android基础】页面跳转与传值(Activity跳转与传值)

    万次阅读 多人点赞 2011-02-10 14:02:00
    一个Android应用程序很少会只有一个Activity对象如何多个Activity之间进行跳转,而且能够互相传值是一个很基本的要求。本次我们就讲一下,Android中页面跳转以及传值的几种方式!Activity跳转与传值,主要是通过...
  • 页面跳转

    千次阅读 2014-05-26 20:29:24
    一个Android应用程序很少会只有一个Activity对象如何多个Activity之间进行跳转,而且能够互相传值是一个很基本的要求。   本次我们就讲一下,Android中页面跳转以及传值的几种方式!   Activity...
  • Android页面跳转

    千次阅读 2014-09-14 22:03:30
    一个Android应用程序通常有多个Activity对象如何多个Activity之间进行跳转,而且能够互相传值是一个很基本的要求。 下面是Android中页面跳转以及传值的几种方式! Activity跳转与传值,主要是通过...
  • 一个Android应用程序很少会只有一个Activity对象如何多个Activity之间进行跳转,而且能够互相传值是一个很基本的要求。 本次我们就讲一下,Android中页面跳转以及传值的几种方式! Activity跳转与传值,...
  • 一个Android应用程序很少会只有一个Activity对象如何多个Activity之间进行跳转,而且能够互相传值是一个很基本的要求。 本次我们就讲一下,Android中页面跳转以及传值的几种方式! Activity跳转与传值,...
  • 1、Entity:基本和数据表一一对应,一个实体一张表 2、VO:代表值对象的...3、BO:Bo就是把业务逻辑封装为一个对象(注意是逻辑,业务逻辑),这个对象可以包括一个或多个其它的对象,通过调用Dao方法,结合Po或...
  • 一个Android应用程序很少会只有一个Activity对象如何多个Activity之间进行跳转,而且能够互相传值是一个很基本的要求。 本次我们就讲一下,Android中页面跳转以及传值的几种方式! Activity跳转与传值,主要是...
  • 一个Android应用程序很少会只有一个Activity对象如何多个Activity之间进行跳转,而且能够互相传值是一个很基本的要求。 本次我们就讲一下,Android中页面跳转以及传值的几种方式! Activity跳转与传值,主要是...
  • 一个Android应用程序很少会只有一个Activity对象如何多个Activity之间进行跳转,而且能够互相传值是一个很基本的要求。 本次我们就讲一下,Android中页面跳转以及传值的几种方式! Activity跳转与传值,主要是...
  • bo、vo、po、dto、pojo我只了解到是属于实体中的一类,...代表的是值对象的实体,通常用于service层和controller层之间进行数据传递,大部分是由视图的对象使用的,对于一WEB页面将整个页面的属性封装成一个对象,然
  •  实现网页之间信息传递的方式有很种,例如,在页面上添加标签并设置其href属性、运用 windows.location 对象、在后台代码中实现等。这里主要介绍如何在后台代码中实现网页之间的重定向和传值。  新建初始项目 ...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 128
精华内容 51
关键字:

多个页面之间如何传递对象