Javascript 为什么$routeProvider会提前触发路由?

Javascript 为什么$routeProvider会提前触发路由?,javascript,angularjs,route-provider,Javascript,Angularjs,Route Provider,我已经准备好了 function ($routeProvider) { $routeProvider .when('/', { templateUrl: 'views/pages/home.html', controller: 'HomeController' }) .when('/terms', { templateUrl: 'views/pages/terms/te

我已经准备好了

function ($routeProvider) {
    $routeProvider
        .when('/', {
            templateUrl: 'views/pages/home.html',
            controller: 'HomeController'
        })
        .when('/terms', {
            templateUrl: 'views/pages/terms/terms.html',
            controller: 'TermsController'
        })
        .when('/patients/:patientId/schedule/daily', {
            templateUrl: 'views/pages/schedule/schedule.html',
            controller: 'ScheduleHomeController'
        })
        .when('/patients/:patientId/schedule/complex', {
            templateUrl: 'views/pages/schedule/schedule.html',
            controller: 'ScheduleHomeController'
        })
        .when('/error', {
            templateUrl: 'views/pages/error.html',
            controller: 'HomeController'
        })
        .otherwise({
            redirectTo: '/error'
        });
我有一些链接:

            <li class="anchor" data-ng-class="{'current-pg':model.schedulePage==='daily-schedule'}">
                <a href="#/patients/{{ model.currentPatient.patientId }}/schedule/daily">Daily</a>
            </li>
            <li data-ng-class="{'current-pg':model.schedulePage==='complex-schedule'}">
                <a href="#/patients/{{ model.currentPatient.patientId }}/schedule/complex">Complex</a>
            </li>
触发的
跟踪

[Log] console.trace()
    (anonymous function) (app.src.js, line 6110)
    invoke (vendor.src.js, line 29750)
    instantiate (vendor.src.js, line 29758)
    (anonymous function) (vendor.src.js, line 34048)
    link (vendor.src.js, line 52831)
    invokeLinkFn (vendor.src.js, line 33805)
    nodeLinkFn (vendor.src.js, line 33315)
    compositeLinkFn (vendor.src.js, line 32664)
    publicLinkFn (vendor.src.js, line 32543)
    boundTranscludeFn (vendor.src.js, line 32682)
    controllersBoundTransclude (vendor.src.js, line 33342)
    update (vendor.src.js, line 52789)
    $broadcast (vendor.src.js, line 40332)
    (anonymous function) (vendor.src.js, line 52472)
    processQueue (vendor.src.js, line 38795)
    (anonymous function) (vendor.src.js, line 38811)
    $eval (vendor.src.js, line 40013)
    $digest (vendor.src.js, line 39829)
    $apply (vendor.src.js, line 40118)
    done (vendor.src.js, line 35245)
    completeRequest (vendor.src.js, line 35435)
    requestLoaded (vendor.src.js, line 35376)

有什么原因吗?

在HTML中,点击不是由AngularJS处理的,而是在AngularJS检测到哈希更改时进行的。要解决此问题,您应该使用
ng href
而不是
href
,并省略
#/
部分。AngularJS将重写您的链接,以
#/
开头

   <li class="anchor" data-ng-class="{'current-pg':model.schedulePage==='daily-schedule'}">
        <a ng-href="patients/{{ model.currentPatient.patientId }}/schedule/daily">Daily</a>
    </li>
    <li data-ng-class="{'current-pg':model.schedulePage==='complex-schedule'}">
        <a ng-href="patients/{{ model.currentPatient.patientId }}/schedule/complex">Complex</a>
    </li>

  • 正在触发哪个HomeController路由/错误还是/?如果是/错误,则可能没有正确生成哈希路径,因此与路由不匹配,从而触发其他路由
       <li class="anchor" data-ng-class="{'current-pg':model.schedulePage==='daily-schedule'}">
            <a ng-href="patients/{{ model.currentPatient.patientId }}/schedule/daily">Daily</a>
        </li>
        <li data-ng-class="{'current-pg':model.schedulePage==='complex-schedule'}">
            <a ng-href="patients/{{ model.currentPatient.patientId }}/schedule/complex">Complex</a>
        </li>