javascript - Angular 基本路由问题

标签 javascript angularjs angularjs-scope angular-ui angular-routing

我开始学习 Angular,我想制作一个单页应用程序。我通过 yo angular 安装了 angular 的 mvc 结构

我正在尝试用关于和联系页面填充主 div。但是由于某种原因,它对我不起作用,我的浏览器崩溃了(我想我把它放到了无限循环中)

<div ng-controller="mainContent">
    <div id="main">
        <div ng-view></div>
    </div>
</div>

这就是我的应用程序的结构。

app
|
|------------scripts
|               |
|                ---------controllers
|               |              |
|               |             main.js
|               app.js
|
|-------------views
|               |
|              about.html
|              contact.html
|              main.html
|
|
index.html

这是我的文件

文件名:index.html

<!doctype html>
<!--[if lt IE 7]>      <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>         <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>         <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
  <head>
    <meta charset="utf-8">
    <title></title>
    <meta name="description" content="">
    <meta name="viewport" content="width=device-width">
    <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->
    <!-- build:css styles/vendor.css -->
    <!-- bower:css -->
    <link rel="stylesheet" href="bower_components/bootstrap/dist/css/bootstrap.css" />
    <!-- endbower -->
    <!-- endbuild -->
    <!-- build:css({.tmp,app}) styles/main.css -->
    <link rel="stylesheet" href="styles/main.css">
    <!-- endbuild -->
  </head>
  <body ng-app="myAngularApp">
    <!--[if lt IE 7]>
      <p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
    <![endif]-->

    <!-- Add your site or application content here -->
    <div class="container" ng-view=""></div>

    <!-- Google Analytics: change UA-XXXXX-X to be your site's ID -->
     <script>
       (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
       (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
       m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
       })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

       ga('create', 'UA-XXXXX-X');
       ga('send', 'pageview');
    </script>

    <!--[if lt IE 9]>
    <script src="bower_components/es5-shim/es5-shim.js"></script>
    <script src="bower_components/json3/lib/json3.min.js"></script>
    <![endif]-->

    <!-- build:js scripts/vendor.js -->
    <!-- bower:js -->
    <script src="bower_components/jquery/dist/jquery.js"></script>
    <script src="bower_components/angular/angular.js"></script>
    <script src="bower_components/bootstrap/dist/js/bootstrap.js"></script>
    <script src="bower_components/angular-resource/angular-resource.js"></script>
    <script src="bower_components/angular-cookies/angular-cookies.js"></script>
    <script src="bower_components/angular-sanitize/angular-sanitize.js"></script>
    <script src="bower_components/angular-route/angular-route.js"></script>
    <script src="bower_components/angular-bootstrap/ui-bootstrap-tpls.js"></script>
    <!-- endbower -->
    <!-- endbuild -->

        <!-- build:js({.tmp,app}) scripts/scripts.js -->
        <script src="scripts/app.js"></script>
        <script src="scripts/controllers/main.js"></script>
        <!-- endbuild -->
</body>

</html>

文件名:app.js

'use strict';

angular.module("myAngularApp", ["ui-bootstrap-tpls.js"]);
angular
  .module('myAngularApp', [
    'ngCookies',
    'ngResource',
    'ngSanitize',
    'ngRoute'
  ])

    .config(function ($routeProvider) {
        $routeProvider
            .when('/', {
                templateUrl: 'views/main.html',
                controller: 'MainCtrl'
            })
            .when('/about', {
                    templateUrl : 'views/about.html',
                    controller  : 'aboutCtrl'
            })

            .otherwise({
                redirectTo: '/'
            });
    });

文件名:main.js

'use strict';

angular.module('myAngularApp')
  .controller('MainCtrl', function ($scope) {
    $scope.awesomeThings = [
      'HTML5 Boilerplate',
      'AngularJS',
      'Karma'
    ];



  });


angular.module("myAngularApp")
    .controller('mainContent', function ($scope) {
        $scope.message = 'Everyone come and see how good I look!';
    });

angular.module("myAngularApp")
    .controller('aboutCtrl', function ($scope) {
        $scope.message = 'Everyone come and see how good I look!';
    });

angular.module("myAngularApp")
    .controller('contactCtrl', function ($scope) {
        $scope.message = 'Everyone come and see how good I look!';
    });

我能做些什么来解决这个路由问题,并在 main 中的正确位置打开关于和联系页面。

谢谢

最佳答案

与 Angular 路由相关的无限循环的一个典型原因是,您的部分组件之一包含 ng-view 指令,该指令告诉 Angular 在路由器中查找要加载的 View ,这然后再次使用 ng-view 指令加载部分,然后告诉 angular 查看路由器并再次加载 View ......是的,你明白了 ;)

因此,请检查您的 index.html(主容器)中是否只有 ng-view 指令。

关于javascript - Angular 基本路由问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22884588/

相关文章:

javascript - 进一步生成 'one by one' 的随机元素生成集

javascript - MVC3 Javascript 在页面外不起作用

angularjs - 使用 Angularjs 确认电子邮件地址

angularjs - 将工厂数据绑定(bind)到 angularjs Controller

performance - 多个观察者处理相同的值,性能如何?

html - jqm 中的全局弹出窗口

javascript - 使用 Google Apps 脚本从 Google 文档中的文本中检索链接的 URL

javascript - 我可以使用哪种技术在表单字段中加载对象的值,然后更新该值,使其可用于我的 $scope 变量

javascript - AngularJS 名称可用性

javascript - Angular - 嵌套 JavaScript 数组的循环