通过使用指令创建导航栏,单击导航栏中的项目,ng-view 中的模板 html 为空
By using directive to create navbar ,click a item in navbar,the template hetml in ng-view is empity
我使用 angularjs 的指令创建了一个导航栏,现在我想点击导航栏中的一个项目以在 ng-view 标签中显示一个模板 html 文件,但它不起作用。
我应该怎么做?将不胜感激。
提前致谢
index.html
<html lang="en" ng-app="app">
<head>
<meta charset="UTF-8">
<title>Title</title> <linkrel="stylesheet"href="bower_components/bootstrap/dist/css/bootstrap.css"> <linkhref="https://cdn.bootcss.com/fontawesome/4.7.0/css/fontawesome.css"rel="stylesheet">
</head>
<body>
<na></na>
<div ng-view></div>
<script src="bower_components/jquery/dist/jquery.js"></script>
<script src="bower_components/bootstrap/dist/js/bootstrap.js"></script>
<script src="bower_components/angular/angular.js"></script>
<script src="bower_components/angular/angular-route.js"></script>
<script src="bower_components/angular/angular-animate.js"></script>
<script src="bower_components/angular/angular-sanitize.js"></script>
<script src="app.js"></script>
</body>
</html>
app.js
var app=angular.module("app",['ngRoute']);
app.directive('na',function () {
return {
restrict: "EA",
replace: true,
transclude: true,
scope:{
items:'@items',
},
templateUrl:'./tpl/index/tmpl/tplindex.html',
// template: '<ul ng-repeat="item in items" class="nav navbar navbar-default"> <li><i class="{{item.icon}}" aria-hidden="true"></i>{{item.name}}</li> </ul>',
link:function($scope, element, attrs){
$scope.items=[{name:'system',icon:'fa fa-windows fa-2x',id:'system'},
{name:'recognition',icon:'fa fa-indent fa-2x',id:'recognition'},
{name:'route',icon:'fa fa-indent fa-2x',id:'route'},
{name:'auth',icon:'fa fa-user-circle-o fa-2x',id:'auth'},
{name:'strategy',icon:'fa fa-windows fa-2x',id:'strategy'},
{name:'strategy',icon:'fa fa-windows fa-2x',id:'static'}
];
}
}
}).config(['$routeProvider', '$controllerProvider',
function($routeProvider, $controllerProvider) {
$routeProvider.
when('/recongition', {
template:'this is test info'
}).
when('/system', {
templateUrl: './tpl/system/system.html'
}).
when('/route', {
templateUrl: 'tpl/route/route.html'
//controller: 'routeController',
//directive:'routeDrective'
}).
when('/auth', {
templateUrl: 'tpl/auth/auth.html'
}).
when('/strategy', {
templateUrl: 'tpl/strategy/strategy.html'
}).
when('/static', {
templateUrl: './tpl/static/static.html'
}).
otherwise({
redirectTo: '/static' //angular就喜欢斜杠开头
});
}]);
tplindex.html
<nav class="navbar navbar-default navbar-fixed-top">
<div class="navbar-header" style="margin-left: 20px">
<a class="navbar-brand" href="#" style="font-size: xx-large"> Panabit</a>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav" ng-repeat="item in items">
<li><a href="#/{{item.id}}" ><i class="{{item.icon}}"></i> {{item.name}}</a></li>
</ul>
</div><!--/.nav-collapse -->
</nav>
您需要使用 ng-href
指令而不是 href
才能在您的网址中使用 angular 插值 {{item.id}}
。所以你的 link 应该看起来像这样:
<li><a ng-href="#/{{item.id}}" ><i class="{{item.icon}}"></i> {{item.name}}</a></li>
如果这不起作用,它可能会尝试使用 html5mode 路由,因此您可以尝试通过添加
来禁用它
$locationProvider.html5Mode(true);
添加路线配置的位置。
如果您在代码中添加了一个 Plunker(或类似的),那将会很有帮助,这样我们就可以自己尝试一下了。
其他说明
- 你不需要你的指令是透明的
- 您似乎没有向
items
-scope 变量传递任何内容,因此您可以删除它并简单地使用 scope: true
- 您或许应该改用 angular 1.5 组件(假设您使用的是 angular 1.5 或更高版本)
我使用 angularjs 的指令创建了一个导航栏,现在我想点击导航栏中的一个项目以在 ng-view 标签中显示一个模板 html 文件,但它不起作用。 我应该怎么做?将不胜感激。
提前致谢
index.html
<html lang="en" ng-app="app">
<head>
<meta charset="UTF-8">
<title>Title</title> <linkrel="stylesheet"href="bower_components/bootstrap/dist/css/bootstrap.css"> <linkhref="https://cdn.bootcss.com/fontawesome/4.7.0/css/fontawesome.css"rel="stylesheet">
</head>
<body>
<na></na>
<div ng-view></div>
<script src="bower_components/jquery/dist/jquery.js"></script>
<script src="bower_components/bootstrap/dist/js/bootstrap.js"></script>
<script src="bower_components/angular/angular.js"></script>
<script src="bower_components/angular/angular-route.js"></script>
<script src="bower_components/angular/angular-animate.js"></script>
<script src="bower_components/angular/angular-sanitize.js"></script>
<script src="app.js"></script>
</body>
</html>
app.js
var app=angular.module("app",['ngRoute']);
app.directive('na',function () {
return {
restrict: "EA",
replace: true,
transclude: true,
scope:{
items:'@items',
},
templateUrl:'./tpl/index/tmpl/tplindex.html',
// template: '<ul ng-repeat="item in items" class="nav navbar navbar-default"> <li><i class="{{item.icon}}" aria-hidden="true"></i>{{item.name}}</li> </ul>',
link:function($scope, element, attrs){
$scope.items=[{name:'system',icon:'fa fa-windows fa-2x',id:'system'},
{name:'recognition',icon:'fa fa-indent fa-2x',id:'recognition'},
{name:'route',icon:'fa fa-indent fa-2x',id:'route'},
{name:'auth',icon:'fa fa-user-circle-o fa-2x',id:'auth'},
{name:'strategy',icon:'fa fa-windows fa-2x',id:'strategy'},
{name:'strategy',icon:'fa fa-windows fa-2x',id:'static'}
];
}
}
}).config(['$routeProvider', '$controllerProvider',
function($routeProvider, $controllerProvider) {
$routeProvider.
when('/recongition', {
template:'this is test info'
}).
when('/system', {
templateUrl: './tpl/system/system.html'
}).
when('/route', {
templateUrl: 'tpl/route/route.html'
//controller: 'routeController',
//directive:'routeDrective'
}).
when('/auth', {
templateUrl: 'tpl/auth/auth.html'
}).
when('/strategy', {
templateUrl: 'tpl/strategy/strategy.html'
}).
when('/static', {
templateUrl: './tpl/static/static.html'
}).
otherwise({
redirectTo: '/static' //angular就喜欢斜杠开头
});
}]);
tplindex.html
<nav class="navbar navbar-default navbar-fixed-top">
<div class="navbar-header" style="margin-left: 20px">
<a class="navbar-brand" href="#" style="font-size: xx-large"> Panabit</a>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav" ng-repeat="item in items">
<li><a href="#/{{item.id}}" ><i class="{{item.icon}}"></i> {{item.name}}</a></li>
</ul>
</div><!--/.nav-collapse -->
</nav>
您需要使用 ng-href
指令而不是 href
才能在您的网址中使用 angular 插值 {{item.id}}
。所以你的 link 应该看起来像这样:
<li><a ng-href="#/{{item.id}}" ><i class="{{item.icon}}"></i> {{item.name}}</a></li>
如果这不起作用,它可能会尝试使用 html5mode 路由,因此您可以尝试通过添加
来禁用它$locationProvider.html5Mode(true);
添加路线配置的位置。
如果您在代码中添加了一个 Plunker(或类似的),那将会很有帮助,这样我们就可以自己尝试一下了。
其他说明
- 你不需要你的指令是透明的
- 您似乎没有向
items
-scope 变量传递任何内容,因此您可以删除它并简单地使用scope: true
- 您或许应该改用 angular 1.5 组件(假设您使用的是 angular 1.5 或更高版本)