AngularJS - ui-routing 和 ng-click 无法正常工作
AngularJS - ui-routing with ng-click not working properly
我正在使用 ui-router 创建一些路线,但我遇到了一件非常奇怪的事情。
我有这个路由配置
.state('chapter_route', {
url: '/book/:chap',
templateUrl: "views/chapter.html",
params: { chap: null}
})
所以当我碰杯时:
<a ui-sref="chapter_route({ chap: getChapter.title})">CHAPTER:</a>
它按照我的意愿将我重定向到以下 ui-view:
<div class="panel panel-default">
<div class="panel-body">
<p>{{getChapter.title}}</p>
{{getChapter.content}}
</div>
</div>
......
......
<div class="panel panel-default" data-ng-repeat="cha in allChapters">
<div class="panel-body">
<a ui-sref="chapter_route({ chap: cha.title})" ng-click="changeChapter(chap)">{{cha.title}}</a> {{cha.content | limitTo: 100}}.
<button ng-click="changeChapter(article)">PRESS ME </button>
</div>
</div>
如你所见,我这里有另一个 <a>
标签,它应该将我发送到不同的章节并更改章节
的值
getChapter 类似于:
$scope.allChapters = [
{
title: "title 1",
chapter: "the whole chapter goes here"
},
{
title: "title 2",
chapter: "the whole chapter 2 goes here"
},
{
title: "title 3",
chapter: "the whole chapter 3 goes here"
}
];
$scope.getChapter = $scope.allChapters[0];
changeChapter 看起来像这样:
$scope.changeChapter = function(chap){
$scope.getChapter = chap;
console.log($scope.getChapter);
};
所以这是真正发生的事情:
我首先展示第一章并为接下来的所有章节创建链接。如果我点击 <a>
标签,它会使用 ng-click 更改 getChapter 的值,并将其完美地打印在控制台上,但它不会更改本章的 ui-view ,除非我点击它再次。我可以看到 ui-view 有几分之一秒的变化,但它不会停留,它会快速加载第一章的 ui-view。但如果我再次单击,它会显示我正在单击的章节。所以,我需要点击两次才能改变,这很奇怪。
但是,如果我决定单击 "PRESS ME" 按钮,它会直接进入 ui-view 中的下一章。
根据章节标题,我希望能够单击 <a>
标签并更改为不同的 ui-view,同时具有不同的 url。
知道是什么导致了这个奇怪的错误吗?
谢谢:)
编辑:
https://plnkr.co/edit/D6f9Q3fhL294DukEZFOz?p=preview
我为我们正在讨论的问题添加了一个简单的插件,这样您可以更好地了解我在说什么。
Check this plunker for your working example
你必须为此使用 $state.go
。
$scope.changeChapter = function(chap){
$scope.getChapter = chap;
$state.go('chapter_route', {chap: chap});
console.log($scope.getChapter);
};
注意:不要忘记在控制器中添加$state
。
问题出在您的控制器代码 $scope.getChapter = $scope.allChapters[0];
这里,对于所有情况,您都将当前章节与第一章进行硬编码,因此在所有情况下,它只会呈现相同的内容。
将其替换为 if (!$stateParams.chap) {
$scope.selectedChapter = $scope.allChapters[0];
}
。它会解决你的问题。 Updated Plunker with Fix
我正在使用 ui-router 创建一些路线,但我遇到了一件非常奇怪的事情。
我有这个路由配置
.state('chapter_route', {
url: '/book/:chap',
templateUrl: "views/chapter.html",
params: { chap: null}
})
所以当我碰杯时:
<a ui-sref="chapter_route({ chap: getChapter.title})">CHAPTER:</a>
它按照我的意愿将我重定向到以下 ui-view:
<div class="panel panel-default">
<div class="panel-body">
<p>{{getChapter.title}}</p>
{{getChapter.content}}
</div>
</div>
......
......
<div class="panel panel-default" data-ng-repeat="cha in allChapters">
<div class="panel-body">
<a ui-sref="chapter_route({ chap: cha.title})" ng-click="changeChapter(chap)">{{cha.title}}</a> {{cha.content | limitTo: 100}}.
<button ng-click="changeChapter(article)">PRESS ME </button>
</div>
</div>
如你所见,我这里有另一个 <a>
标签,它应该将我发送到不同的章节并更改章节
getChapter 类似于:
$scope.allChapters = [
{
title: "title 1",
chapter: "the whole chapter goes here"
},
{
title: "title 2",
chapter: "the whole chapter 2 goes here"
},
{
title: "title 3",
chapter: "the whole chapter 3 goes here"
}
];
$scope.getChapter = $scope.allChapters[0];
changeChapter 看起来像这样:
$scope.changeChapter = function(chap){
$scope.getChapter = chap;
console.log($scope.getChapter);
};
所以这是真正发生的事情:
我首先展示第一章并为接下来的所有章节创建链接。如果我点击 <a>
标签,它会使用 ng-click 更改 getChapter 的值,并将其完美地打印在控制台上,但它不会更改本章的 ui-view ,除非我点击它再次。我可以看到 ui-view 有几分之一秒的变化,但它不会停留,它会快速加载第一章的 ui-view。但如果我再次单击,它会显示我正在单击的章节。所以,我需要点击两次才能改变,这很奇怪。
但是,如果我决定单击 "PRESS ME" 按钮,它会直接进入 ui-view 中的下一章。
根据章节标题,我希望能够单击 <a>
标签并更改为不同的 ui-view,同时具有不同的 url。
知道是什么导致了这个奇怪的错误吗?
谢谢:)
编辑:
https://plnkr.co/edit/D6f9Q3fhL294DukEZFOz?p=preview
我为我们正在讨论的问题添加了一个简单的插件,这样您可以更好地了解我在说什么。
Check this plunker for your working example
你必须为此使用 $state.go
。
$scope.changeChapter = function(chap){
$scope.getChapter = chap;
$state.go('chapter_route', {chap: chap});
console.log($scope.getChapter);
};
注意:不要忘记在控制器中添加$state
。
问题出在您的控制器代码 $scope.getChapter = $scope.allChapters[0];
这里,对于所有情况,您都将当前章节与第一章进行硬编码,因此在所有情况下,它只会呈现相同的内容。
将其替换为 if (!$stateParams.chap) {
$scope.selectedChapter = $scope.allChapters[0];
}
。它会解决你的问题。 Updated Plunker with Fix