【问题标题】:Ui-router not generating templates having checked all optionsui-router 未生成已检查所有选项的模板
【发布时间】:2017-06-06 09:23:20
【问题描述】:

我正在尝试使用 Angular 中的 ui-router 在<ui-view></ui-view> 中生成具有多个模板的单个页面,但它无法加载单个模板。它只是给出一个没有 JavaScript 错误的空白页面,甚至没有出现导航栏。

我在堆栈上遇到了很多关于此的问题,但即使应用他们的解决方案也无济于事:

这是我的 index.html:

<!DOCTYPE html>
<html lang="en">
<head>
<!--stylesheets-->
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" type="text/css" href="assets/css/normalize.css">
    <link rel="stylesheet" type="text/css" href="assets/css/bootstrap.css">
    <link rel="stylesheet" type="text/css" href="assets/css/owl.css">
    <link rel="stylesheet" type="text/css" href="assets/css/animate.css">
    <link rel="stylesheet" type="text/css" href="assets/fonts/font-awesome-4.1.0/css/font-awesome.min.css">
    <link rel="stylesheet" type="text/css" href="assets/fonts/eleganticons/et-icons.css">
    <link rel="stylesheet" type="text/css" href="assets/css/cardio.css">
    <link rel="stylesheet" type="text/css" href="assets/css/bootstrap-theme.min.css">
</head>
<body ng-app="myShelfApp">
    <nav class="navbar">
        <div class="container" >
            <!-- Brand and toggle get grouped for better mobile display -->
            <!-- <div class="navbar-header">
                <button type="button" class="navbar-toggle " data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="#"><img src="assets/img/logo.png" data-active-url="assets/img/logo-active.png" alt=""></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 main-nav">
                    <li><a ui-sref="home">Home</a></li>
                    <li><a ui-sref="devices">Search</a></li>
                    <li><a ui-sref="addDevice">Add</a></li>
                </ul>
            </div>
            <!-- /.navbar-collapse -->
        </div>
        <!-- /.container-fluid -->
    </nav>

    <div ui-view></div>

    <section id="service" class="section section-padded">
    <!-- Holder for mobile navigation -->



    </section>
    <!-- scripts -->
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
      <script src="assets/js/angular.js"></script>
      <script src="assets/js/angular-ui-router.js"></script>
      <script src="https://unpkg.com/ng-table@2.0.2/bundles/ng-table.min.js"></script>
      <script src="app.js"></script>
      <script src="service/device.service.js"></script>
      <script src="controller/main.controller.js"></script>
      <script src="controller/shelf.controller.js"></script>
      <script src="controller/device.controller.js"></script>
      <script src="controller/newdevice.controller.js"></script>

</body>
</html>

这是 app.js

(function (){
   "use strict";
    var app=angular.module("myShelfApp",['ui.router','ngTable',"deviceservice"]);


    // app.service('DeviceFactoryService',deviceservice(DeviceFactory));
    app.config(['$stateProvider', '$urlRouterProvider', function   ($stateProvider,$urlRouterProvider){
          $urlRouterProvider.otherwise("/");

        $stateProvider
        .state("home",{
            url:"/",
            templateUrl:"main.html",

        });
    }]);

    app.run(function($rootScope) {
     $rootScope.$on("$stateChangeError", console.log.bind(console));
    });

})();

这是我的模板:

    <div id="home" ng-Controller="mainController">
        <div class="container" >
            <div class="row text-center title">
                <!--<h2>Services</h2>
                <h4 class="light muted">Achieve the best results with our wide variety of training options!</h4>-->
                <div class="jumbotron">
                  <h1 class="display-3"> Device Farm </h1>
                  <hr class="my-4">
                  <p><span class="label label-info">{{count}}</span></p>
                </div>
            </div>
            <div class="row services">
                <div class="col-md-4">
                    <a href="/devices" >
                    <div class="service">
                        <div class="icon-holder">
                            <img src="assets/img/icons/phone-blue.png" alt="" class="icon">
                        </div>
                        <h3 class="description">My Devices</h3>
                    </div>
                    </a>
                </div>
                <div class="col-sm-4">
                <a href="/add_device">
                    <div class="service">
                        <div class="icon-holder">
                            <img src="assets/img/icons/add-blue.png" alt="" class="icon">
                        </div>
                        <h3 class="description">Add Device</h3>
                    </div>
                </a>
                </div>
                <div class="col-md-4">
                    <a href="">
                    <div class="service">
                        <div class="icon-holder">
                            <img src="assets/img/icons/search-blue.png" alt="" class="icon">
                        </div>
                        <h3 class="description">Search Device</h3>
                    </div></a>
                </div>
            </div>
        </div>
        <div ></div>
    </div>

这是我的 app.index.js 我重定向到 index.js 的地方

    var express=require("express");
    var app= express();
    var bodyParser = require('body-parser');    
    var methodOverride = require('method-override');
    var router=require('./app.routes.js');
    var port=8888;

    app.use(express.static(__dirname + '/public'));  
    app.use(bodyParser.urlencoded({'extended':'true'}));
    app.use(bodyParser.json());
    app.use(methodOverride());
    app.use((request,response,next)=>{
    console.log(request.headers)
    next()
    });
    app.use('/api',router);
    app.get('*',function(req,res){
    res.sendFile('index.html',{root:__dirname+'/public'});
    });
    app.listen(port,error);
    function error(err){
    if(err){
        console.log(`Something went wrong`,err);
    }

    console.log(`Server is running on ${port}`);
    }

【问题讨论】:

  • 我没有花时间重新创建您的代码,但立即突出的第一件事是$urlRouterProvider.otherwise("main.html");...否则您应该加载 URL 片段,而不是模板。此外,您的默认状态应该是"/"。不是""。将这两个都更改为"/",看看是否有任何变化。
  • @Claies 进行了更改,但仍然没有解决同样的问题
  • 尝试移动&lt;script src="service/device.service.js"&gt;&lt;/script&gt;before &lt;script src="app.js"&gt;&lt;/script&gt;
  • @AlonEitan 所以我试过了,但它没有帮助,无论如何这会引发控制器问题而不是加载模板
  • @user3488376 请包括您在控制台中遇到的错误。问题的性质仍不清楚。您还应该在 Google Chrome 开发者工具的网络选项卡中搜索 404 错误(或其他错误)

标签: javascript html angularjs node.js angular-ui-router


【解决方案1】:

所以,伙计们,我找到了我的 ui-router 无法正常工作的原因。 显然你不能声明 app.module('app',['dependency']) 即使在你的控制器或其他模块中使用 angular.modular('app',[]) 也会覆盖你的主 app.module 并且因为这个我控件没有进入 app.config 以使 ui-router 工作。

参考答案:

Angular routing config function not called 进一步了解。 谢谢各位

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-08
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多