pub trait RouterScopeExt {
// Required methods
fn navigator(&self) -> Option<Navigator>;
fn location(&self) -> Option<Location>;
fn route<R>(&self) -> Option<R>
where R: Routable + 'static;
fn add_location_listener(
&self,
cb: Callback<Location>,
) -> Option<LocationHandle>;
fn add_navigator_listener(
&self,
cb: Callback<Navigator>,
) -> Option<NavigatorHandle>;
}
Expand description
An extension to Scope
that provides location information and navigator
access.
You can access them on ctx.link()
§Example
Below is an example of the implementation of the Link
component.
impl<R: Routable + 'static> Component for Link<R> {
type Message = Msg;
type Properties = LinkProps<R>;
fn create(_ctx: &Context<Self>) -> Self {
Self { _data: PhantomData }
}
fn update(&mut self, ctx: &Context<Self>, msg: Self::Message) -> bool {
match msg {
Msg::OnClick => {
ctx.link()
.navigator()
.expect_throw("failed to get navigator.")
.push(&ctx.props().to);
false
}
}
}
fn view(&self, ctx: &Context<Self>) -> Html {
html! {
<a class={ctx.props().classes.clone()}
href={ctx.props().to.to_path()}
onclick={ctx.link().callback(|e: MouseEvent| {
e.prevent_default();
Msg::OnClick
})}
>
{ ctx.props().children.clone() }
</a>
}
}
}
Required Methods§
Returns current Navigator
.
sourcefn add_location_listener(
&self,
cb: Callback<Location>,
) -> Option<LocationHandle>
fn add_location_listener( &self, cb: Callback<Location>, ) -> Option<LocationHandle>
Adds a listener that gets notified when location changes.
§Note
LocationHandle
works like a normal ContextHandle
and it unregisters the callback
when the handle is dropped. You need to keep the handle for as long as you need the
callback.
Adds a listener that gets notified when navigator changes.
§Note
NavigatorHandle
works like a normal ContextHandle
and it unregisters the callback
when the handle is dropped. You need to keep the handle for as long as you need the
callback.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.