[英]AngularJS — Custom Directive Won't Work Properly
这里是AngularJS的新功能。 经过3个小时以上的努力后,即使我完全掌握了我要执行的操作,但我似乎仍无法使自定义指令正常运行,并且通常了解如何在HTML文件中创建并包括自定义指令发生。
我的问题:如何在自定义指令中获取表达式以成功显示在页面上?
文件在下面。 协助将不胜感激! 提前致谢。
的index.html
<html ng-app="favoritePlayers">
<head>
<meta charset="utf-8">
<!-- Bootstrap CSS-->
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" >
<link rel="stylesheet" type="text/css" href="css/custom.css" />
<script type="text/javascript" src="js/angular.min.js"></script>
<script type="text/javascript" src="js/bootstrap.min.js"></script>
<script type="text/javascript" src="js/app.js"></script>
<title>My Favorite Players</title>
</head>
<body>
<!-- Expression within controller -->
<section ng-controller="NFLController as nfl">
<h1>why does this work?</h1>
<div ng-repeat="team in nfl.teams">
<h3> {{team.qb}}</h3>
</div>
</section>
<br>
<br>
<!-- Using a custom directive instead -->
<section ng-controller="NFLController as nfl">
<h1>...but this doesn't?</h1>
<div ng-repeat="team in nfl.teams">
<running-backs></running-backs>
</div>
</section>
</body>
</html>
app.js
(function(){
var app = angular.module("favoritePlayers", []);
app.controller("NFLController", function(){
this.teams = league;
});
app.directive('runningBacks', function(){
return {
restrict: 'E',
templateUrl: 'running-backs.html',
//controller:
//controllerAs:
};
});
var league = [
{
teamName: "Philadelphia Eagles",
qb: "Mark Sanchez",
rb: "LeSean McCoy",
wr: "Jeremy Maclin",
superbowl_contender: true
},
{
teamName: "Dallas Cowboys",
qb: "Tony Romo",
rb: "Demarco Murray",
wr: "Dez Bryant",
superbowl_contender: true
},
{
teamName: "New York Giants",
qb: "Eli Manning",
rb: "Rashad Jennings",
wr: "Odell Beckham Jr.",
superbowl_contender: false
},
{
teamName: "Washington Redskins",
qb: "Robert Griffin III",
rb: "Alfred Morris",
wr: "Desean Jackson",
superbowl_contender: false
},
];
})();
磨合backs.html
<h3> yo {{team.rb}} </h3>
我认为您的代码确实有效,当我尝试running-backs.html
它时,似乎还没有running-backs.html
您是从网络服务器运行还是从本地文件系统运行? 如果我使用<script type="text/ng-template" id="running-backs.html">
而不是从外部文件加载,则它会按预期运行。
(function(){ var app = angular.module("favoritePlayers", []); app.controller("NFLController", function(){ this.teams = league; }); app.directive('runningBacks', function(){ return { restrict: 'E', templateUrl: 'running-backs.html', //controller: //controllerAs: }; }); var league = [ { teamName: "Philadelphia Eagles", qb: "Mark Sanchez", rb: "LeSean McCoy", wr: "Jeremy Maclin", superbowl_contender: true }, { teamName: "Dallas Cowboys", qb: "Tony Romo", rb: "Demarco Murray", wr: "Dez Bryant", superbowl_contender: true }, { teamName: "New York Giants", qb: "Eli Manning", rb: "Rashad Jennings", wr: "Odell Beckham Jr.", superbowl_contender: false }, { teamName: "Washington Redskins", qb: "Robert Griffin III", rb: "Alfred Morris", wr: "Desean Jackson", superbowl_contender: false }, ]; })();
<html ng-app="favoritePlayers"> <head> <meta charset="utf-8"> <!-- Bootstrap CSS--> <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css" /> <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" > <link rel="stylesheet" type="text/css" href="css/custom.css" /> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script> <title>My Favorite Players</title> </head> <body> <!-- Expression within controller --> <section ng-controller="NFLController as nfl"> <h1>why does this work?</h1> <div ng-repeat="team in nfl.teams"> <h3> {{team.qb}}</h3> </div> </section> <br> <br> <!-- Using a custom directive instead --> <section ng-controller="NFLController as nfl"> <h1>...but this doesn't?</h1> <div ng-repeat="team in nfl.teams"> <running-backs></running-backs> </div> </section> <script type="text/ng-template" id="running-backs.html"> <h3> yo {{team.rb}} </h3> </script> </body> </html>
我怀疑这是一个范围界定问题。 最好的方法是在指令中创建隔离范围 :
app.directive('runningBacks', function(){
return {
restrict: 'E',
templateUrl: 'running-backs.html',
scope: { team: '=teamName' } // sets local `team` equal to the value
// of the `team-name` attribute
};
});
视图:
<div ng-repeat="team in nfl.teams">
<running-backs team-name="team"></running-backs>
</div>
完整示例:
var app = angular.module("favoritePlayers", []); app.controller("NFLController", function() { this.teams = league; }); app.directive('runningBacks', function() { return { restrict: 'E', templateUrl: 'running-backs.html', scope: { team: '=teamName' } }; }); var league = [{ teamName: "Philadelphia Eagles", qb: "Mark Sanchez", rb: "LeSean McCoy", wr: "Jeremy Maclin", superbowl_contender: true }, { teamName: "Dallas Cowboys", qb: "Tony Romo", rb: "Demarco Murray", wr: "Dez Bryant", superbowl_contender: true }, { teamName: "New York Giants", qb: "Eli Manning", rb: "Rashad Jennings", wr: "Odell Beckham Jr.", superbowl_contender: false }, { teamName: "Washington Redskins", qb: "Robert Griffin III", rb: "Alfred Morris", wr: "Desean Jackson", superbowl_contender: false }, ];
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <div ng-app="favoritePlayers"> <!-- Using a custom directive instead --> <section ng-controller="NFLController as nfl"> <div ng-repeat="team in nfl.teams"> <running-backs team-name="team"></running-backs> </div> </section> <script type="text/ng-template" id="running-backs.html"> <h3> yo {{team.rb}} </h3> </script> </div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.