gpt4 book ai didi

javascript - Angular ng-repeat 不适用于深度链接

转载 作者:行者123 更新时间:2023-11-28 20:31:06 26 4
gpt4 key购买 nike

我在 Angular 中遇到了一个有趣的问题,但我似乎找不到解决方案。

这是来源:http://plnkr.co/edit/XTXOYn8LcG0yb846lwbS

基本上,我使用 ng-repeat 创建一个垂直侧边栏,深度链接到页面的特定部分。现在,我已经静态测试了生成的代码,它可以工作,所以也许我没有做正确的事情。

这是代码,以防您不想访问 Plunker。

index.html

<!doctype html>
<html ng-app="plunker" >
<head>
<meta charset="utf-8">
<title>AngularJS Plunker</title>
<script>document.write('<base href="' + document.location + '" />');</script>
<link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/css/bootstrap-combined.min.css" rel="stylesheet">
<link rel="stylesheet" href="style.css">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.js"></script>
<script src="app.js"></script>
</head>
<body ng-controller="MainCtrl">
<div class="span3 sidebar">
<ul class="nav nav-tabs nav-stacked span3">
<li ng-repeat="rule in rules">
<a ng-click="scrollTo('{{ rule.name|toId }}')">{{ rule.name }}</a>
</li>
</ul>
</div>
<div class="span9">
<div class="rule" ng-repeat="rule in rules">
<section id="{{ rule.name|toId }}" >
<header>
<h1>{{ rule.name }}</h1>
</header>
</section>
</div>
</div>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script src="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/js/bootstrap.min.js"></script>
</body>
</html>

app.js

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

app.
filter('toId', function(){
return function(input){
var out = "";

out = input.replace(/\s+/g, '-').toLowerCase();

return out;
}
});

app.
controller('MainCtrl', function($scope) {
$scope.rules = [
{
'name': 'rule1',
'desc': 'I am a rule.'
},
{
'name': 'rule2',
'desc': 'I am a rule.'
},
{
'name': 'rule3',
'desc': 'I am a rule.'
}
];

$scope.scrollTo = function(id) {
$location.hash(id);
$anchorScroll();
};
});

知道为什么会发生这种情况吗?

最佳答案

问题出在这个表达式中:

<a ng-click="scrollTo('{{ rule.name|toId }}')">{{ rule.name }}</a>

您必须记住,AngularJS 不是基于字符串的模板引擎,因此您不能在随机位置抛出 {{expr}} 。相反,您需要根据此处描述的语法编写有效的表达式:http://docs.angularjs.org/guide/expression

幸运的是,修复很简单:

<a ng-click="scrollTo(rule.name)">{{ rule.name }}</a>

并将过滤逻辑移至 Controller :

      $scope.scrollTo = function(id) {
$location.hash(toIdFilter(id));
$anchorScroll();
};

在这里工作:http://plnkr.co/edit/QqGW8CC3kRW3t881j0yV?p=preview

关于javascript - Angular ng-repeat 不适用于深度链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16363445/

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