Ionic中可观察到的Nav params

时间:2017-07-27 10:31:42

标签: angular ionic-framework rxjs

在Angular route中,params是可观察对象。我可以订阅这个对象:

constructor(public navParams: NavParams) {
    this.videoId = navParams.get('videoId');
}

我可以使用Ionic navParams做类似的事情吗?

@Override
        protected Boolean doInBackground(String... urls) {
            try {

                HttpGet httppost = new HttpGet(urls[0]);

                HttpParams httpParameters = new BasicHttpParams();

                HttpClient httpclient = new DefaultHttpClient();
                HttpResponse response = httpclient.execute(httppost);
                HttpParams params = httpclient.getParams();

                status = response.getStatusLine().getStatusCode();

                if (status == 200) {
                    HttpEntity entity = response.getEntity();
                    String data = EntityUtils.toString(entity);

                    JSONObject jsono = new JSONObject(data);
                    JSONArray jarray = jsono.getJSONArray("results");

                    for (int i = 0; i < jarray.length(); i++) {
                        JSONObject object = jarray.getJSONObject(i);

                        Elements parameters = new Elements();

                        parameters.setTitle(object.getString("name"));
                        parameters.setImage(object.getString("icon"));

                        elementList.add(parameters);
                    }

                    JSONArray jarraytwo = jsono.getJSONArray("opening_hours");

                    for (int i = 0; i < jarraytwo.length(); i++) {
                        JSONObject objecttwo = jarraytwo.getJSONObject(i);

                        Elements parameterstwo = new Elements();

                        parameterstwo.setAuthor(objecttwo.getString("open_now"));

                        Toast.makeText(getApplicationContext(), "open_now : " + objecttwo.getString("open_now"), Toast.LENGTH_LONG).show();

                        elementListtwo.add(parameterstwo);
                    }

                    return true;
                }

            }  catch (JSONException e3) {
                e3.printStackTrace();
            }  catch (IOException e2) {
                e2.printStackTrace();
            }

            return false;
        }

是否可以将videoId转换为可观察值?

例如,我有product page。该产品有许多颜色变化。颜色是Nav params的参数。用户可以改变颜色,但不需要做NavCtrl.push()因为颜色变化太小变化。这不是历史上的另一页。我只想在组件中更改this.color。但我需要订阅组件中的颜色变化。

2 个答案:

答案 0 :(得分:1)

如果您只想通知从页面到组件的颜色变化,可以在此处使用事件。从ionic-angular导入事件类并将其注入构造函数。在按钮上的页面中,单击发布一个事件,并在组件的构造函数中订阅该事件。所以代码如下所示。

  

在您的信息页

import {Events} from ‘ionic-angular‘;
onClick(){
    this.events.publish(‘myEvent‘);
}
  

在您的组件中,您可以订阅该活动

this.events.subscribe(‘myEvent’,() => {

// do something

});

答案 1 :(得分:0)

无需举办活动。 如果您将NavParams作为对象传递,例如 {color : "red", videoId :1 }

通过引用传递。因此,您在一方进行的任何更改都将反映在另一方,例如 {color : "blue" , videoId :1 }。 我不相信这会重新呈现整页。