角度视图未加载,但控制器是

时间:2014-07-03 16:21:49

标签: javascript angularjs url-routing angularjs-routing angularjs-controller

我在Angular中为几个视图定义了路由,一个是默认的“Tickets”,另一个是编辑视图“Ticket”。出于某种原因,当我将“编辑”编码为URL时,票证路线打开正常。如果我使用ng-click编写“编辑”链接以在控制器上运行方法并更改位置(即$ location.path('/ ticket / 2')),它会加载正确的控制器'TicketController'但从不似乎加载视图。事实上,加载正确的控制器,然后加载默认控制器。

在下面的Plunker中,你会看到每个细节项的两个编辑链接,'Edit'是一个带有href设置的url(工作正常),另一个'Edit 2'正在使用ng-click指令。

http://plnkr.co/edit/aY7fSvVJCIaVYnCHXcq6?p=preview

(function () {
    var app = angular.module('SimpleTicket', ['ngRoute']);

    app.config(function ($httpProvider, $routeProvider) {
        $routeProvider.
            when('/ticket/:ticketId',
                {
                    templateUrl: 'ticket.html',
                    controller: 'TicketController as vm'
                }).
            when('/', {
                templateUrl: 'tickets.html',
                controller: 'TicketsController as vm'
            }).
            otherwise({
                redirectTo: '/'
            });

    });

    var TicketController = function ($scope, $log, $routeParams, $location) {
        var vm = this;
        $log.log('TicketController');
        var saveTicket = function () {
          $log.log('Item saved')
          $location.path('/');
        };

        vm.saveTicket = saveTicket;

        vm.ticket = {TicketId:2,Title:'Ticket 2',Body:'Body 2'};

    };
    app.controller("TicketController", TicketController);

    var TicketsController = function ($location, $log) {
        var vm = this;
        $log.log('TicketsController');

        var editTicket = function () {
            $log.log('editTicket');
            $location.path('/ticket/2');
        };
        vm.editTicket = editTicket;

        vm.tickets = [{TicketId:1,Title:'Ticket 1',Body:'Body 1'},
            {TicketId:2,Title:'Ticket 2',Body:'Body 2'}];

    };

    app.controller("TicketsController", TicketsController);



}());

2 个答案:

答案 0 :(得分:3)

href="#"

中删除href=""tickets.html

Working Plunkr

答案 1 :(得分:0)

在index.html中,您必须修复ng-app中的额外双引号,如@brygiger所说。

同样在tickets.html中你有额外的#in href,你不需要它,你可以在这里看到:https://docs.angularjs.org/api/ng/directive/ngHref

<a ng-href="ticket/{{ticket.TicketId}}">edit</a> | 
<a href="" ng-click="vm.editTicket()">edit 2</a>
http://plnkr.co/edit/AuFnB7dV1YOkTuQiqxvg

请参阅plunker了解固定版本