在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。但我需要订阅组件中的颜色变化。
答案 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 }
。
我不相信这会重新呈现整页。