簡體   English   中英

帶有Express后端的Angular Routing templateUrl不起作用

[英]Angular Routing templateUrl with Express backend not working

我在使用角度路由和表達來顯示局部圖像時遇到問題。 我正在嘗試進行設置,以便仍然可以使用pug(以前稱為jade)編寫簡短的html。 據我所知,一切應該正常工作,沒有錯誤,一切都在正確進行。 我的應用程序的大多數其他部分(api調用,控制器等)都在工作,我的主頁如下:

    doctype html
    html(ng-app='myapp')
        head
            base(href='/')
            script(src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.js")
            script(src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular-route.js")

        body
             header#main

            .content(ng-view)


             script(src="/js/app.js")
             script(src="/js/controllers/adminController.js")
             script(src="/js/routes.js")

這是我的路線文件

angular.module('myapp')
.config(function ($routeProvider, $locationProvider) {
    $routeProvider
        .when('/admin', {
            templateUrl: '/templates/admin',
            controller: 'AdminController',
            caseInsensitiveMatch: true
        })
        .otherwise({
            template: '<h1>Page not found</h1>'
        })
    ;
    $locationProvider.html5Mode(true);
});

最后,快遞路線:

router.get('/templates/:name', function(req, res, next) {
     var name = 'templates/' + req.params.name;
     console.log('Express: ' + name);
     res.render(name, function(err, html){
        //this callback function can be removed. It's just for debugging.
        if(err)
            console.log("Error: " + err);
        else
            console.log("We're good!");
        res.send(html);
     });
 });

最后,這是節點服務器的輸出:

Express: index
GET /admin 304 68.962 ms - -
GET /js/app.js 304 0.994 ms - -
GET /js/controllers/adminController.js 304 0.751 ms - -
GET /js/routes.js 304 14.590 ms - -
Express: templates/admin
We're good!
GET /templates/admin 304 368.081 ms - -

如您所見,索引將加載,調用部分索引,並且模板將按照您的期望進行調用和呈現。

問題是ng-view沒有被替換或更新。 如果我將路由更改為模板而不是templateUrl,並且僅打印出一行文本,那么一切都很好,所以我知道路由有效,這不是應用程序配置問題。

我已經堅持了幾天,並且沒有任何錯誤消息,所以我完全不知道為什么它不起作用。

另外,當我在控制器中檢查以下內容時,我得到了部分內容,因此可以正常進行:

angular.module('buriedcinema.controllers')
    .controller('AdminController', ['$templateCache', function(Movies, Users, $templateCache){
    console.log($templateCache.get('templates/admin'));
}
console:
<h1> this is my partial </h1>

通過在路由中添加“ controllerAs:”選項並通過對象名稱引用控制器來解決。

.when('/admin', {
            templateUrl: 'templates/admin',
            controller: 'AdminController',
            controllerAs: 'adminCtrl',
            caseInsensitiveMatch: true
        })

更具技術性的解釋是,我沒有實例化具有狀態的對象,而是嘗試靜態使用我的控制器,因此它從未更新。 希望這可以幫助其他人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM