0

What am I doing wrong? I cannot make it work. The link of login and signin don't react as they are not links. I see the url of the login when I do the mouseover upon the link the following address localhost:8080/demo/index.html#/login. I click but it doesn't work at all.

At the beginning, I didn't realize that I needed to change the anchor attribute href to ui-sref, but when I use href, it redirects to login page completely without the index.html template structure.

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'
    })
});
3
  • Are you sure the templates are in the proper directory ? Commented Sep 11, 2016 at 19:06
  • Here is a good article to start with: tech.endeepak.com/blog/2014/05/03/debugging-angular-ui-router You can catch transition errors, it'll clearify the situation. And btw, your last layout name key not a string, but it doesn't matter. Commented Sep 11, 2016 at 19:41
  • Korte all the pages are in the root of webcontent. Commented Sep 11, 2016 at 19:52

2 Answers 2

1

You're doing it completely wrong. First of all you need to have at least one ui-view which should be present inside index.html. What's more there won't be any state which is using index.html.

Ok, so here's an example how your index.html should look like:

index.html - navbar-brand destination was changed into ui-sref="home" which is your home/starting page. It's easier to use ui-sref which takes state name (home,login,signup) than href which takes url (#/,#/login,#/singup). Besides you'll have one place to change state destination (url) than searching for all href instances.

<!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 - template which was previously included inside 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 - here you can find all states definition which are going to be placed in place of ui-view directive.

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'
    })
});
Sign up to request clarification or add additional context in comments.

Comments

0

I was able to get your code to work when i removed the 'layout' portion. also, i dont think you need the index page in the routing.

      <div  ui-view></div>

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.