javascript - AngularJS ng-if 根据路由位置显示标题内容

标签 javascript angularjs

我有一个 SPA,需要根据用户所在的路线位置显示不同的 header 。看起来我的代码应该可以工作,但它会产生如下错误: TypeError: undefined is not a function

我在这里缺少什么: html

<html lang="en" ng-app="configApp">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <!--<meta name="viewport" content="width=device-width, initial-scale=1">-->
    <title>Configuration Admin</title>

    <!-- Bootstrap CSS -->
    <link href="_/css/bootstrap.css" rel="stylesheet">
    <link href="_/css/main-styles.css" rel="stylesheet">


</head>
<body>
<div class="container">
    <!-- Header-->
       <div class="row">
           <!-- Header to be shown when a program is edited-->
           <div ng-include="'templates/headers/nav-icons.html'" ng-if="showNavIcons"></div>
           <!-- Header to be shown when Dashboard view-->
           <div ng-include="'templates/headers/nav-logo.html'" ng-if="hideNavIcons"></div>
       </div> <!-- end header -->
</div>


<!-- Scripts -->
<script src="_/js/bootstrap.js"></script>
<script src="_/js/main-scripts.js"></script>
<script src="_/js/angular.min.js"></script>
<script src="_/js/angular-route.min.js"></script>
<script src="_/js/ui-bootstrap-tpls-0.11.0.min.js"></script>
<script src="_/js/router.js"></script>

</body>
</html>

JS

var configApp = angular.module("configApp", ['ngRoute','ui.bootstrap'])

 .config(function($routeProvider){
    $routeProvider.when('/dashboard', {
        templateUrl: 'templates/dashboard/home.html'
       // controller: 'HomeController'
        })

        .when('/organizations', {
            templateUrl: 'templates/dashboard/organizations/organizations-title.html',
            controller: 'OrganizationController',
            activetab: 'organizations'
        })


        .when('/program-details-edit', {
            templateUrl: 'templates/dashboard/organizations/programs/program-details-edit.html',
             controller: 'ProgramDetailsEdit'
        })
    .otherwise( {redirectTo: '/dashboard'} );
});


// Side Nav Link Controllers
configApp.controller('OrganizationController', function($scope) {});
configApp.controller('SideNavCtrl', function($scope, $location) {
    $scope.isActive = function(route) {
        return route === $location.path();
    }
});

configApp.controller('ProgramDetailsEdit', ['$scope', '$location', '$route', function($scope, $route, $location) {
    $scope.showNavIcons = $location.path() === '/program-details-edit';
}]);

configApp.controller('OrganizationController', ['$scope', '$location', '$route', function($scope, $route, $location) {
    $scope.hideNavIcons = $location.path() === '/organizations';
    $scope.$route = $route;
}]);

最佳答案

您需要将 Controller 添加到元素中。 “ng-controller='controllerName'”作为属性。就类型错误而言,它是未定义的,但是如果您这样做...!!变量,则未定义将变为假。

编辑:

   <div class="row" ng-controller="ProgramDetailsEdit">
       <!-- Header to be shown when a program is edited-->
       <div ng-include="'templates/headers/nav-icons.html'" ng-if="!!showNavIcons">
   </div>

ng-controller 将使 div 内部的 dom 能够访问它放入您设置的 $scope 变量中的所有内容。

作为旁注,您应该查看 UI-Router https://github.com/angular-ui/ui-router

它比 $routeProvider 更容易、更强大,您可以按照以下方式做一些事情...

<div class="row" ng-controller="appController">
       <!-- Header to be shown when a program is edited-->
       <div ng-include="'templates/headers/nav-icons.html'" ng-if="state.name == 'programEditor'">
</div>

关于javascript - AngularJS ng-if 根据路由位置显示标题内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24480214/

相关文章:

javascript - 这种多重悬停效果是否可以仅使用 CSS?

javascript - 从 iframe 获取网站的域名

javascript - 如何在 Shiny 的某些单元格中创建带有空格的类似矩阵的复选框组?

angularjs - 为什么我需要安装node.js和git来学习AngularJS?

css - 如何在所有内容之上显示居中的 md-progress-circular

javascript - 如何使用 CSS/JS 或 jquery 让文本随滚动在 colspan 中 float ?

JavaScript - 按键合并两个数组并保留重复项

javascript - 从外部函数访问 $http 数据

需要 Angularjs Ui 网格分组格式

AngularJS 在多个数组中进行过滤