注意能够从服务获取路线参数

时间:2019-01-19 19:03:55

标签: angular typescript angular-ui-router

好的,我一定做错了。我正在尝试从服务中的路线获取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();
        }
    }
}

1 个答案:

答案 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。

如果您在最终目标上再扩大一点,我很乐意给出更具体的答案!