Javascript $routeChangeSuccess的奇怪行为:第一次加载时未触发(但未抛出任何错误)

Javascript $routeChangeSuccess的奇怪行为:第一次加载时未触发(但未抛出任何错误),javascript,angularjs,Javascript,Angularjs,我甚至不知道如何开始解释这种情况,但我会尽我最大的努力。我有一个简单的西班牙语-英语-西班牙语词典查找页面,其中包含一个文本框、一个查找按钮和一个显示结果的div。在文本框中输入要查找的单词并点击查找,结果显示在下面的div中 在结果中,一些单词是超链接的,因此当你点击它们时,你会在div中得到所点击单词的搜索结果。这就像任何在线词典服务功能一样。除了第二个功能在键入搜索后的第一次单击中似乎不起作用之外,它工作得非常完美。例如: 在输入框中键入pedir,然后点击查找。下面的div现在显示了pe

我甚至不知道如何开始解释这种情况,但我会尽我最大的努力。我有一个简单的西班牙语-英语-西班牙语词典查找页面,其中包含一个文本框、一个查找按钮和一个显示结果的div。在文本框中输入要查找的单词并点击查找,结果显示在下面的div中

在结果中,一些单词是超链接的,因此当你点击它们时,你会在div中得到所点击单词的搜索结果。这就像任何在线词典服务功能一样。除了第二个功能在键入搜索后的第一次单击中似乎不起作用之外,它工作得非常完美。例如:

在输入框中键入pedir,然后点击查找。下面的div现在显示了pedir的详细含义,包括超链接词,如ask,英语为pedir。现在,单击ask,它将刷新div,并向您显示ask的西班牙语含义,包括pedir等词。但是,它只是刷新div并显示与第二次查找pedir时相同的内容。但是,当您现在再次单击询问时,它会像预期的那样正常工作。必须注意的是,这些词是适当的超链接,这里没有错误链接。不仅如此,其他链接(如顶部导航选项卡上的链接)在第一次单击时似乎也不起作用。每次查找新词时都会发生这种情况

希望上面的例子能很好地说明这个问题;至少我已经试过了。我的路由和控制器如下所示:

var asApp = angular.module('asApp', ['ngRoute']);
asApp.config(function($routeProvider) {
    $routeProvider
.when('/', {
            title: 'Home of thesite – Radical Spanish learning tips and tricks for the adventurous learner',
            templateUrl : 'pages/home.html',
            controller  : 'mainController'
        })
// route for dictionary
        .when('/dictionary', {
            title: 'The dictionary',
            templateUrl : 'pages/dictionary.html',
            controller  : 'mainController'
        })

        // route for dictionary term
        .when('/dictionary/:word2lookup', {
            title: 'The thesite dictionary',
            templateUrl : 'pages/dictionary.html',
            controller  : 'dictController'
        })

        // route otherwise
        .otherwise({
            title: 'thesite – Radical Spanish learning tips and tricks for the adventurous learner',
            templateUrl : 'pages/home.html',
            controller  : 'mainController'
        });

});

function HeaderController($scope, $location) 
{ 
    $scope.isActive = function (viewLocation) { 
        return viewLocation === $location.path();
    };
}

asApp.run(['$rootScope', '$route', '$location', function($rootScope, $route, $location) {
$rootScope.$on('$routeChangeSuccess', function (event, current, previous) {
    document.title = 'Translation of ' + $route.current.params['word2lookup'] + ' | ' + $route.current.title;
});
}]);

asApp.controller('mainController', function($scope) {});
asApp.controller('dictController', function($scope, $routeParams){});
我甚至不知道我是否可以在一把小提琴中重现整个情况,因为它涉及一些重要的服务器端脚本

请让我知道,如果有什么我可以解释,以便有人确定小精灵打破我的代码的功能

p.S.:此问题仅影响执行新搜索后的第一次单击(在页面上的任何链接上),即在输入框中输入一个单词并单击查找按钮

更新:响应@gr3g的请求,下面是函数
lookup\u check()
lookup\u word()
的代码:

这:

.otherwise({
            title: 'TheSite – Radical Spanish learning tips and tricks for the adventurous learner',
            templateUrl : 'pages/home.html',
            controller  : 'mainController'
        });
可替换为:

.otherwise("/");
在您的HTML中:
这应该避免:

onclick="$('#word').blur(); lookup_check($('#word').val());"
您可以放置一些JQuery事件,但无法从JQuery传递值。 应该是这样的:

onclick="$('#word').blur(); lookup_check(variableValueBindToInput)"
能否显示
lookup\u check
功能?
并显示如何从链接调用查找函数

这是一个用你的脚本,以有角度的方式使用的Plunker。

寻找绑定html

单击链接时加载页面上的XHR请求(在url中设置请求词)

如果是这种情况,您不能使用:

str = str + "<a ng-click='lookup_checkFromLink(request)'>";
str=str+”;
并且不检查页面加载?

因为,在AngularJs中,当更改路由时,应用程序(#)中的所有内容都不会重新加载整个脚本,这是单页应用程序的核心概念:当只需要更改部分内容时,不会重新加载所有内容

我终于成功了!!有问题的代码位于
lookup\u word()
函数中:

if(!!(window.history && history.pushState)){ history.pushState(null, null, addr); }
                else{ window.location.replace(addr); }

我刚刚删除了if块,并将其替换为
history.pushState(null,null,addr);窗口。位置。替换(地址)。不知道为什么或如何解决了问题。

URL在第一次单击时会发生更改,还是仅在第二次单击时发生更改?您是否在任何地方都有可用版本的页面?有时,仅使用chrome调试器跟踪生成的javascript就会告诉您问题所在,或提示问题所在。@NicholasSmith URL确实会按预期更改,但仅在第二次和后续单击时才会更改。您能显示链接的html吗?@Nikki9696,该网站仍然位于我的本地主机上,这就是为什么寻求帮助如此困难的原因。我不介意和任何想帮我的人分享这些文件,但是它们又大又笨重。谢谢你的关注!我已经按照您的建议更改了路由代码,并发布了
lookup\u check()
lookup\u word()
的内容供您参考。我也试着按照您的指示修改
onclick()
代码,但无法理解如何继续。但到目前为止,该值似乎确实在按预期传递。您是否建议改用
ng车型
?我是否能够根据需要将该函数传递给
lookup\u check()
函数?当然,这是继续的方法。我将发布一个punlkr,试图向您解释如何继续。要记住的路径:使用JQuery,您可以通过选择变量值来获取变量值。Angular的有趣之处在于模型-视图绑定。通过在视图中显示模型值,您需要使用它们……我添加了一个Plunker。我会尝试解决这个问题,但告诉我:当点击链接时,你会调用哪个函数?我实现了你建议的
ng-click()
,它工作得很好,尽管有点像我这样未受过MVC培训的人。第一次点击页面刷新的原始问题仍然存在,不过为了回答您的问题,链接不会触发任何特殊功能或方法。如果您查看dictionary.html文件,页面顶部确实有一堆JS。我试着调查问题是否是由这些因素引起的,但没有找到任何答案。gr3g:我只是想再次感谢你的努力。非常感谢你的帮助。我还想让你知道,如果你坚持到底,帮助我解决这个问题,这对我来说将是一件大事。这么大,我向你保证额外50点赏金(超过
    var loc = window.location.href;
    var lastpart = loc.substring(loc.lastIndexOf('/') + 1);
    if(lastpart != 'dictionary'){ lookup_check(decodeURI(lastpart)); }
str = str + "<a ng-click='lookup_checkFromLink(request)'>";
if(!!(window.history && history.pushState)){ history.pushState(null, null, addr); }
                else{ window.location.replace(addr); }