gpt4 book ai didi

javascript - 为 Bootstrap 菜单项创建指令

转载 作者:行者123 更新时间:2023-12-03 10:56:57 25 4
gpt4 key购买 nike

我已经为 Bootstrap 导航栏中的一些样板文件构建了一个指令,其中包含用于导航栏折叠的 ng-transclude。我还发现 有两种类型的 li 元素navbar-nav 项目取决于菜单项是否是下拉菜单。但是我发现这个下拉菜单不起作用。

我已经在 plunker 中构建了我的代码.

我的 JS 代码如下所示:

var app = angular.module('app',[]);

app.controller('main',['$scope',function($scope){
$scope.navbarOptions = {
color:'inverse',
position:'fixed-top',
collapseTarget:'navbar-ex1-collapse',
brand:'My Login',
};
$scope.menuItems=[{title:'home'},{title:'projects'},{title:'pricing'},
{
title:'Stack',
dropdown:['Java','Ruby','Javascript','Go']
}];
}]);

app.directive('bootstrapNavbar',function(){
return {
restrict:'AE',
templateUrl:'navbar.html',
scope:{
options:"="
},
transclude:true,
};
});

app.directive('bootstrapMenuitem',function(){
return {
restrict:'EA',
templateUrl:'bootstrap-menuItem.html',
scope:{
item:"@"
},
link:function(scope,element,attrs){
console.log(scope);
console.log(element);
console.log(attrs);
}
}
});

我的 html 模板如下所示:

//navbar.html
<nav class="navbar navbar-{{options.color}} navbar-{{options.position}}" role="navigation">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<!-- figure out a way to do toggle as an attribute directive -->
<button ng-show="options.collapseTarget" class="navbar-toggle" data-toggle="collapse" data-target=".{{options.collapseTarget}}">
<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="#">{{options.brand}}</a>
</div>
<div class="collapse navbar-collapse {{options.collapseTarget?options.collapseTarget:''}} navbar-body" ng-transclude>
</div><!-- /.navbar-collapse -->
</div>
</nav>

//bootstrap-menuItem.html
<li ng-hide="dropdown && dropdown.length">


<a href="#">{{item.title}}</a>
</li>

<li ng-show="dropdown && dropdown.length" class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">{{item.title}} <span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li ng-repeat="action in item.dropdown"><a href="#">{{action}}</a></li>
</ul>
</li>

这是我的 html:

 <!DOCTYPE html>
<html lang="en" ng-app="app">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="description" content="Building a directive for horizontal-form using Bootstrap using Angular">
<link data-require="bootstrap@*" data-semver="3.3.1" rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" />
<script data-require="jquery@*" data-semver="2.1.3" src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
<script data-require="bootstrap@*" data-semver="3.3.1" src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
<script data-require="angular.js@*" data-semver="1.4.0-beta.2" src="https://code.angularjs.org/1.4.0-beta.2/angular.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>

<body ng-controller="main">
<nav options="navbarOptions" bootstrap-navbar>
<ul class="nav navbar-nav">
<bootstrap-menuitem ng-repeat="item in menuItems" item="{{item}}"></bootstrap-menuItem>
</ul>
</nav>
</body>

</html>

问题是如何访问 bootstrap-menuitem 内的 item?尽管该模板位于范围内,但它似乎无法使用item

更新:

作用域上访问的项目属性是一个字符串,它必须是一个对象。如何在嵌套指令的作用域上获取 Controller 作用域中的属性?

使用 item:"=" 而不是 @ 会导致错误 http://pastebin.com/e9NDVH5b 。我假设在 bootstrap-menuitem 上使用 = 时,它会从 ng-repeat 获取 item

但是,它会导致 {{item.title}} 显示在页面上。

最佳答案

index.html 中,删除属性 item 中的双括号,

<bootstrap-menuitem ng-repeat="item in menuItems" item="item"></bootstrap-menuItem>

此外,在 bootstrapMenuitem 中,将范围项的声明从 item: "@" 更改为 item: "=":

app.directive('bootstrapMenuitem',function(){
return {
restrict:'EA',
templateUrl:'bootstrap-menuItem.html',
scope:{
item:"="
},
link:function(scope,element,attrs){
console.log(scope);
console.log(element);
console.log(attrs);
}
}
});

这样,item 就可以作为对象而不是纯文本字符串传递到指令的模板。

关于javascript - 为 Bootstrap 菜单项创建指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28232073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com