【问题标题】:How to call a function in AngularJs when route matches?路由匹配时如何在AngularJs中调用函数?
【发布时间】:2013-04-29 08:18:11
【问题描述】:
$routeProvider.when('/ticket', {
    controller: TicketController, 
    templateUrl: Routing.generate('ticket_list')
});

显示一个简单的列表,其中每个条目都是可选的。但是,在选择时不会加载额外的视图。每件事都在ticket_lost template。该模板有一些隐藏字段,当点击条目时会显示出来。

我可以通过设置来定义内部选择哪个条目

selectedTicket = 1;

所以当有这样的路线时

/ticket/1

我想调用一个将 selectedTicket 设置为 1 的函数。这可能吗?怎么做?我必须在路由中更改什么?

【问题讨论】:

  • 您能否提供有关您的应用程序的更多信息 - 您指的是您的问题中未解释的元素 - 也许也可以提供一个 plunkr 或 fiddle 吗?

标签: angularjs angularjs-routing


【解决方案1】:

看看$routeParams 服务。 它允许使用将由服务解析的参数设置路由:

// Given:
// URL: http://server.com/index.html#/ticket/1
// Route: /ticket/:ticketId
//
// Then
$routeParams ==> {ticketId:1}

在您的控制器中:

angular.module('myApp')
    .config(['$routeProvider', function($routeProvider) {
        $routeProvider.when('/ticket', {controller: 'TicketController'});
        $routeProvider.when('/ticket/:ticketId', {controller: 'TicketController'});
        $routeProvider.otherwise({redirectTo: '/ticket'});
    }])
    .controller('TicketController', function ($scope, $routeParams) {
        var init = function () {
            if ($routeParams.ticketId) {
                $scope.ticketSelected($routeParams.ticketId);
            }
        };

        // fire on controller loaded
        init();
    });

【讨论】:

  • 我如何让我的路线/ticket 在有和没有ticketId 参数的情况下工作?
  • 它应该与使用相同控制器的 2 个路由一起使用,一个使用 :ticketId 参数,一个没有
  • 是的,听听@Narretz:你需要 2 条路线。更新了答案
  • @Dmitry Evseev 这是在 URL 更改时识别正确调用方法的最佳方法,没有更好的方法吗?您只是在检查 $routeParams 中是否存在 ticketId,如果我有很多带有 ticketIds 的 URL 怎么办?
  • @Digitlimit 如果您有很多具有相同参数名称 tickerId 但执行不同逻辑的 url,您最好为它们使用单​​独的控制器。具有过多逻辑的控制器将难以维护、扩展和测试。
猜你喜欢
  • 2013-07-19
  • 1970-01-01
  • 2019-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
相关资源
最近更新 更多