0

Что я делаю неправильно? Я не могу заставить его работать. Ссылка login и signin не реагирует, поскольку они не являются ссылками. Я вижу URL-адрес логина, когда наводил указатель мыши на ссылку следующего адреса localhost: 8080/demo/index.html #/login. Я нажимаю, но он вообще не работает.Внедрить угловой u-router вместо ng-router

В начале я не понял, что мне нужно изменить атрибут привязки href на ui-sref, но когда я использую href, он полностью перенаправляется на страницу входа без структуры шаблона index.html.

HTML - index.html

<!DOCTYPE html> 
<html x-ng-app="demo"> 
<head> 
<meta charset="utf-8"> 
<meta http-equiv="X-UA-Compatible" content="IE=edge"> 
<title>Demo</title> 
    <link href="../css/bootstrap.css" rel="stylesheet"> 
    <link href="../css/demo.css" rel="stylesheet"> 
    <link href="http://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet">  
</head> 
<body> 
    <!-- Navigation --> 
    <nav class="navbar navbar-default" role="navigation" style="margin-bottom: 0px !important;"> 
     <!-- Brand and toggle get grouped for better mobile display --> 
     <div class="navbar-header container-fluid"> 
     <a class="navbar-brand" href="index.html">Demo</a> 
     </div> 

     <!-- Collect the nav links, forms, and other content for toggling --> 
     <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> 
     <ul class="nav navbar-nav navbar-right"> 
      <li><a ui-sref="login">Log in</a></li> 
      <li><a ui-sref="signup">Sign in</a></li> 
     </ul> 
     </div><!-- /.navbar-collapse --> 
    </nav> 
    <!-- /.container --> 

    <!-- Page Header --> 
    <!-- Set your background image for this header on the line below. --> 
    <header class="intro-header" style="background-image: url('images/header.jpg')"> 
     <div class="container"> 
      <div class="row"> 
       <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1"> 
        <div class="site-heading" style="height: 250px;"> 
        </div> 
       </div> 
      </div> 
     </div> 
    </header> 

    <!-- Main Content --> 
    <div class="container"> 
     <div class="row"> 
      <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1" ui-view="layout"> 
       <!-- THIS IS JUST CONTENT WHEN ARRIVING TO THE INDEX PAGE --> 
       <div class="post-preview"> 
        <a href="post.html"> 
         <h2 class="post-title"> 
          Title 
         </h2> 
         <h3 class="post-subtitle"> 
          blah blah 
         </h3> 
        </a> 
        <p class="post-meta">Posted by <a href="#">Start Bootstrap</a> on September 24, 2014</p> 
       </div> 
       <hr> 
      </div> 
     </div> 
    </div> 

    <!-- Footer --> 
    <footer class="footer"> 
     <div class="container"> 
     </div> 
    </footer> 

    <script src="../scripts/jquery-3.1.0.min.js"></script> 
    <script src="../scripts/angular.min.js"></script> 
    <script src="../scripts/angular-ui-router.min.js"></script> 
    <script src="../scripts/bootstrap.min.js"></script> 
    <script src="../scripts/ui-bootstrap-tpls-2.1.3.min.js"></script>  
    <script src="../scripts/demo.js"></script> 
</body> 
</html> 

demo.js

var app = angular.module('demo', ['ui.router', 'ui.bootstrap']); 
app.config(function($stateProvider, $urlRouterProvider, $urlMatcherFactoryProvider){ 
    $urlRouterProvider.otherwise('/'); 

    $urlMatcherFactoryProvider.caseInsensitive(true); 
    $urlMatcherFactoryProvider.strictMode(false); 

    $stateProvider 
    .state('index', { 
     url: '/index', 
     view:{ 
      'layout': { 
       templateUrl: 'index.html' 
      } 
     }, 
     controller: '' 
    }) 
    .state('login', { 
     url: '/login', 
     view: { 
      'layout': { 
       templateUrl: 'login.html' 
      } 
     }, 
     controller: '' 
    }) 
    .state('signup', { 
     url: '/signup', 
     view: { 
      layout: { 
       templateUrl: 'signup.html' 
      } 
     }, 
     controller: 'MyController' 
    }) 
}); 
+0

Вы уверены, что шаблоны в соответствующем каталоге? – Korte

+0

Это хорошая статья для начала: http://tech.endeepak.com/blog/2014/05/03/debugging-angular-ui-router/ Вы можете поймать ошибки перехода, это очистит ситуацию. И btw, ваше последнее имя макета 'key' не строка, но это не имеет значения. – Kindzoku

+0

Korte все страницы находятся в корне webcontent. –

ответ

1

Вы делаете это совершенно неправильно. Прежде всего, вам необходимо иметь хотя бы один ui-view, который должен присутствовать внутри index.html. Более того, не будет никакого состояния, которое использует index.html.

Итак, вот пример того, как ваш index.html должен выглядеть следующим образом:

index.html - Navbar бренд назначение было изменено в ui-sref="home" который является вашим домом/начальной страницей. Легче использовать ui-sref, который принимает государственное название (home, login, signup), чем href, который берет URL-адрес (#/, #/login, #/singup). Кроме того, у вас будет одно место для изменения адреса назначения (url), чем поиск всех экземпляров href.

<!DOCTYPE html> 
<html x-ng-app="demo"> 
<head> 
<meta charset="utf-8"> 
<meta http-equiv="X-UA-Compatible" content="IE=edge"> 
<title>Demo</title> 
    <link href="../css/bootstrap.css" rel="stylesheet"> 
    <link href="../css/demo.css" rel="stylesheet"> 
    <link href="http://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet">  
</head> 
<body> 
    <!-- Navigation --> 
    <nav class="navbar navbar-default" role="navigation" style="margin-bottom: 0px !important;"> 
     <!-- Brand and toggle get grouped for better mobile display --> 
     <div class="navbar-header container-fluid"> 
     <a class="navbar-brand" ui-sref="home">Demo</a> 
     </div> 

     <!-- Collect the nav links, forms, and other content for toggling --> 
     <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> 
     <ul class="nav navbar-nav navbar-right"> 
      <li><a ui-sref="login">Log in</a></li> 
      <li><a ui-sref="signup">Sign in</a></li> 
     </ul> 
     </div><!-- /.navbar-collapse --> 
    </nav> 
    <!-- /.container --> 

    <!-- Page Header --> 
    <!-- Set your background image for this header on the line below. --> 
    <header class="intro-header" style="background-image: url('images/header.jpg')"> 
     <div class="container"> 
      <div class="row"> 
       <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1"> 
        <div class="site-heading" style="height: 250px;"> 
        </div> 
       </div> 
      </div> 
     </div> 
    </header> 

    <!-- Main Content --> 
    <div class="container"> 
     <div class="row"> 
      <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1"> 
       <!-- a place where your home.html, login.html and signup.html will be included --> 
       <div ui-view=""></div> 
      </div> 
     </div> 
    </div> 

    <!-- Footer --> 
    <footer class="footer"> 
     <div class="container"> 
     </div> 
    </footer> 

    <script src="../scripts/jquery-3.1.0.min.js"></script> 
    <script src="../scripts/angular.min.js"></script> 
    <script src="../scripts/angular-ui-router.min.js"></script> 
    <script src="../scripts/bootstrap.min.js"></script> 
    <script src="../scripts/ui-bootstrap-tpls-2.1.3.min.js"></script>  
    <script src="../scripts/demo.js"></script> 
</body> 
</html> 

home.html - шаблон, который ранее был включен в index.html

<div class="post-preview"> 
    <a href="post.html"> 
     <h2 class="post-title"> 
      Title 
     </h2> 
     <h3 class="post-subtitle"> 
      blah blah 
     </h3> 
    </a> 
    <p class="post-meta">Posted by <a href="#">Start Bootstrap</a> on September 24, 2014</p> 
</div> 

demo.js - здесь вы можете найти все определения состояний, которые будут размещены на месте директивы ui-view.

var app = angular.module('demo', ['ui.router', 'ui.bootstrap']); 
app.config(function($stateProvider, $urlRouterProvider, $urlMatcherFactoryProvider){ 
    $urlRouterProvider.otherwise('/'); 

    $urlMatcherFactoryProvider.caseInsensitive(true); 
    $urlMatcherFactoryProvider.strictMode(false); 

    $stateProvider 
    .state('home', { 
     url: '/', 
     templateUrl: 'home.html', 
     controller: function(){} 
    }) 
    .state('login', { 
     url: '/login', 
     templateUrl: 'login.html', 
     controller: function(){} 
    }) 
    .state('signup', { 
     url: '/signup', 
     templateUrl: 'signup.html', 
     controller: 'MyController' 
    }) 
}); 
0

Мне удалось заставить ваш код работать, когда я удалил часть «layout». также, я не думаю, что вам нужна указательная страница в маршрутизации.

 <div ui-view></div> 

     $stateProvider.state('login', { 
      url: '/login', 
      templateUrl: 'login.html' 
     }) 
     .state('signup', { 
      url: '/signup', 
      templateUrl: 'signup.html' 
     })