【问题标题】:Nested Views with Dynamic Id's Angular & Rails具有动态 ID 的 Angular 和 Rails 的嵌套视图
【发布时间】:2016-03-12 12:55:13
【问题描述】:

嘿,我有 Angular 将引用列表渲染为资源。报价存储在 rails 后端。我现在想使用 Angular 为该特定报价资源呈现 show.html。

我无法从角度解决该状态。 我不确定我是否了解如何将 id 传递给 state。 我需要帮助弄清楚如何在标有“fullquote”的ui-view中渲染show.html以获取特定报价。这是我的代码。

Quotes.html

<div class="quotes col-xs-10 col-md-8" ng-controller="QuotesCtrl" >
    <div ng-repeat="quote in quotes">
      <a ng-click="showQuote(quote);">
        <span ng-if="quote.read == false"> *NEW*</span>
        <span>Quote id: {{quote.id}}</span>
        <span>Name: {{quote.name}}</span>
        <span>Email: {{quote.email}}</span>
        <span>City: {{quote.city}}</span>
        <span>Region: {{quote.region}}</span>
        <span>State: {{quote.state}}</span>
      </a>
      <div ng-show="quote.visible">
        <a ui-sref="quotes/{{quote.id}}"> View </a>
        <ui-view="fullquote"></ui-view="fullquote">
        <a ng-click="quotes.splice($index, 1)"> Delete </a>
        <div ng-if"">
          <span>  {{quote.question2 }}</span>
          <span>  {{quote.question3 }}</span>
          <span>  {{quote.question4 }}</span>
          <span>  {{quote.question5 }}</span>
          <span>  {{quote.question6 }}</span>
          <span>  {{quote.question7 }}</span>
          <span>  {{quote.question8 }}</span>
          <span>  {{quote.question9 }}</span>
          <span>  {{quote.question10 }}</span>
          <span>  {{quote.question11 }}</span>
          <span>  {{quote.question12 }}</span>
          <span>  {{quote.question13}}</span>
        </div>
      </div>
    </div>
  </div>

Quotes.js

app.factory('Quotes', ['$resource',function($resource){
 return $resource('/quotes.json', {},{
 query: { method: 'GET', isArray: true },
 create: { method: 'POST' }
 })
}]);

app.factory('Quote', ['$resource', function($resource){
 return $resource('/quotes/:id.json', {}, {
 show: { method: 'GET' },
 update: { method: 'PUT', params: {id: '@id'} },
 delete: { method: 'DELETE', params: {id: '@id'} }
 });
}]);
app.config(function($stateProvider, $urlRouterProvider, $locationProvider) {
    $stateProvider
    .state('home', { url: '', templateUrl: 'static_pages/home.html'})
    .state('quotes', { url: '/quotes', abstract: false, views : { templateUrl: 'quotes.html', controller:   'QuotesCtrl'}})
    .state('quotes/:id',  { url: 'quotes/:id', view: { "fullquote": { templateUrl: 'show.html', controller:   'QuotesCtrl'}}})
    .state('quotes/:id.pdf', { url: 'quotes/:id.pdf', controller:   'QuotesCtrl'})
    .state('users', { url: '/users', templateUrl: 'users.html', controller:   'UsersCtrl'})
    .state('/users/:id', { url: 'users_show.html', controller: "UsersCtrl" });
    $urlRouterProvider.otherwise( function($injector, $location) {
        var $state = $injector.get("$state");
            $state.go("home");
    })
    $locationProvider.html5Mode({ enabled: true, requireBase: false });
});

app.controller("QuotesCtrl", ['$scope', '$state', '$http', 'Quotes', 'Quote', '$location',  function($scope, $state, $http, Quotes, Quote, $location ) {
    $scope.quotes = Quotes.query();
    $scope.quote = Quote.query();

    $scope.showQuote = function (quote) {
        quote.visible = !quote.visible;
    }
}]);

【问题讨论】:

  • 当您从服务器请求报价时,您能告诉我报价包含哪些 JSON 数据吗?
  • 你的州名也是错误的

标签: javascript ruby-on-rails angularjs controllers


【解决方案1】:

您应该研究几件事:

  1. 您的州名不正确。我假设您正在尝试使用嵌套状态。在这种情况下,您需要拥有 quotes.detail 或类似的东西。此外,在该州,您需要将对象命名为 views 而不是 view。请参考UI.Router multiple views guide了解更多信息。

    .state('quotes.detail', { url: 'quotes/:id', 意见:{ "fullquote": { templateUrl: 'show.html', 控制器:'QuoteCtrl'} } })

  2. 要将参数传递给状态,您需要将链接更改为该状态。如果您想了解更多关于将参数传递给 ui.router 状态的信息 - 请阅读manual

&lt;a ui-sref="quotes.detail({{quote.id}})"&gt; View &lt;/a&gt;

  1. 如果你想有一个单独的视图,你还需要有一个单独的控制器。我把它命名为QuoteController。您可以通过在控制器中注入 $stateParams 从 URL 中获取 ht :id。有关将参数输入控制器的更多信息 - here

    //QuoteController ['$stateParams, Quote , function($stateParams, Quote) { Quoute.get({id:$stateParams.id}); }]

我不确定这会完全解决您的问题,但它肯定会让您更接近解决问题。希望对您有所帮助!

【讨论】:

  • 这有帮助。它消除了一些混乱。我已经完成了没有动态:id 的嵌套视图,但现在传递 id 令人困惑。我能够进入状态 quote.detail 但我仍然在 url 中获得 quote.id 或者如果我没有设置 url 我没有获得状态来呈现模板 url。
  • 你需要一个单独的控制器和 $stateParams 来从 URL 中获取参数。我更新了我的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-16
相关资源
最近更新 更多