【问题标题】:Using ui-router and parameters使用 ui-router 和参数
【发布时间】:2015-07-12 23:12:51
【问题描述】:

我有一个名为 products 的页面,有一个我使用 ng-repeat 列出的产品列表。对于每个产品,它们每个都有一个<a> 标记用于链接。我希望每个链接都将用户发送到products/item?productid=xxx,其中 xxx 代表每个特定项目的 ID。

使用 ui-router,如何使用<a>products/item 发送 GET 参数以及如何使用 ui-router 检测 GET 参数并加载项目的数据(例如名称、描述) 进入项目的页面控制器。

我已经阅读了https://github.com/angular-ui/ui-router/wiki/URL-Routing 所以如果我设置了

$stateProvider
.state('products.item', {
    url: "/products/:productid",
    templateUrl: 'products.item.html',
    controller: function ($stateParams) {
        // If we got here from a url of /contacts/42
        expect($stateParams).toBe({contactId: "42"});
    }
})

我应该将expect($stateParams).toBe({contactId: "42"}); 设置为什么?

我是用 PHP 做的。在 PHP 中,我必须将 <a> 更改为 <button> 并触发表单提交。然后使用 $_GET,我将调用另一个带有参数的 PHP 脚本并解析 JSON 响应。但是,我想将其更改为单个页面,这样就不会重新加载整页。

【问题讨论】:

    标签: javascript php angularjs get angular-ui-router


    【解决方案1】:

    您的属性名称错误。它需要与您在状态定义对象的url 属性中定义的值相匹配。所以如果你有

     url: "/products/:productid",
    

    在您的状态下定义,然后如果您转到“products/42”,您应该能够使用 $stateParams 访问该值。

    expect($stateParams).toBe({productid: "42"});
    

    【讨论】:

    • 如果我有多个productid,比如1-100,是否需要为1-100的每件商品创建一个expect($stateParams).toBe({productid: "42"});
    • 我如何为其设置默认值,以便当用户键入 http://www.blahblah.com/products/item 而没有 GET 参数时,它会将它们重定向到其他地方?
    • 您“不需要”将 expect() 调用放在任何地方。这只是为了证明您可以在需要时访问该信息。
    • 我不确定。我认为它涉及更多。这里有一些讨论:github.com/angular-ui/ui-router/issues/108
    猜你喜欢
    • 1970-01-01
    • 2015-11-21
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    相关资源
    最近更新 更多