从主路由器

时间:2018-03-26 18:26:09

标签: aurelia aurelia-binding aurelia-di

我正在尝试找到一种方法来创建自定义视图模型,并使其功能可以从主路由器视图元素中的页面访问。这个自定义视图模型,在我的情况下称为" secondbar"应该位于主导航栏下并且应该包含登录状态("登录为..." /"未登录")。

在我的路由器视图中,其中一个页面是登录页面。成功登录后,我希望能够调用" secondbar"直接为了在没有页面刷新的情况下更改登录状态。

我试图注入" secondbar" login.js文件中的类;通过这种方式我可以访问这些功能,但页面上的消息不会改变(看起来我正在访问" secondbar"的另一个实例)。我还尝试直接在主导航栏上打印出相同的消息,但似乎这不是正确的方法,它也不起作用。

是否有某种方式,我如何访问" secondbar"直接类(浏览器中显示相同的实例)并从路由器视图内的页面调用位于那里的函数?

App.html

<template bindable="router">
  <require from="secondbar/secondbar"></require>

  <!-- navbar -->

  <secondbar view-model.ref="secondbar"></secondbar>

   <router-view>
    <!—- page content -->
  </router-view>
</template>

App.js

import {Redirect} from 'aurelia-router';
import {inject} from 'aurelia-framework';

export class App {

configureRouter(config, router) {
    this.router = router;
    config.title = ‘’;
    config.map([
        { route: [''], name: 'home', moduleId: 'home/index', nav: true, title: 'Home' , settings: { roles: [''] }},
        { route: 'login', name: 'login', moduleId: 'login/login', nav: true, title: 'Log In', settings: { roles: [''] }},
    ]);
}
}

1 个答案:

答案 0 :(得分:0)

你可以做的是创建一个namespace DnrBoards { public partial class DonorBoardOsh : System.Web.UI.Page { List<Donors> dnrs = new List<Donors>(); protected void Page_Load(object sender, EventArgs e) { using (DnrBrdDataContext DR = new DnrBrdDataContext()) { var dnrList = (from d in DR.DonorBoards where (d.SiteLocation == "OSH") && (d.Club != "0 Donations") orderby d.Donation_Type, d.Donation_Sum, d.Donor ascending select new { _DonorName = d.Donor.ToString(), _Club = d.Club }).ToList(); foreach (var item in dnrList) { dnrs.Add(new Donors(item._DonorName, item._Club)); } } Label2.Text = "Last data pull at: " + DateTime.Now.ToString(); } protected void Process_Data() { List<Donors> dlLeft = new List<Donors>(); List<Donors> dlRight = new List<Donors>(); for (int i = 0; i < 43; i++) { try { dlLeft.Add(dnrs[0]); dnrs.RemoveAt(0); } catch { } } for (int i = 0; i < 43; i++) { try { dlRight.Add(dnrs[0]); dnrs.RemoveAt(0); } catch { } } dnrResultsLeft.GridLines = GridLines.None; dnrResultsLeft.DataSource = dlLeft; dnrResultsLeft.DataBind(); dnrResultsRight.GridLines = GridLines.None; dnrResultsRight.DataSource = dlRight; dnrResultsRight.DataBind(); dlLeft.Clear(); dlRight.Clear(); Label1.Text = "Last Refresh: " + DateTime.Now.ToString(); } } } 或类似的东西,你可以在login-service和登录页面视图中绑定。基本会是这样的:

登录页:

secondbar

secondbar.js:

import login-service from "/login-service/login-service";

// inject    

login() {
  // do login stuff
  this.loginService.currentUser = user; // user would be any object of choice
}

secondbar.html

import login-service from "/login-service/login-service";

// inject