好的,我一定做错了。我正在尝试从服务中的路线获取ID。
让我解释一下,我有一项服务,希望在不需要导航的组件中查找路线的ID,因为我想要一个接口,这样我就可以轻松测试事物。
真正奇怪的是,如果我在组件中做与服务完全相同的事情,则一个返回id,另一个返回未定义。
public class SimpleHTTPServer {
public static void main(String[] args) throws Exception {
//create a network socket which can accept connection on certain TCP port
//create Server which can accept requests
final ServerSocket server = new ServerSocket(900);
System.out.println("Listening for connection on port 900...");
while(true) {
try { //creates socket when new request is received
Socket socket = server.accept();
System.out.println("received request");
RequestHandler rh = new RequestHandler(socket); //RequestHandler implements runnable interface, pass this object to create Thread
Thread thread = new Thread(rh);
thread.start(); //begins run() method defined in rh
// Date today = new Date();
// String httpResponse = "HTTP/1.1 200 OK\r\n\r\n" + today;
// socket.getOutputStream().write(httpResponse.getBytes("UTF-8"));
// System.out.println("got a new request");
} catch (Exception e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:0)
真正奇怪的是,如果我在组件中做与服务完全相同的事情,则一个返回id,另一个返回未定义。
如果您没有将activeRoute传递给service方法,它将无法访问此数据。该服务(通常)是位于组件范围之外的单例,并通过DI系统注入。
一种替代方法是让服务方法(或静态函数)接受活动路由作为参数并处理组件传入的内容。您可以从ngOnInit中的组件传递它
//service or static method
recordParams(activeRoute: ActivatedRoute) {
activeRoute.params.subscribe(params=> console.log(params));
}
//component
constructor(private activeRoute: ActivatedRoute, private theService: TheService) {}
ngOnInit() {
this.theService.recordParams(this.activeRoute);
}
更多选择,您在ngOnInit中有一个基本类型的组件可以执行此操作,并且您想要具有此功能的任何组件都可以扩展该基本类型,并调用父构造函数(将激活的路线),然后调用super.ngOnInit。
如果您在最终目标上再扩大一点,我很乐意给出更具体的答案!