2017-06-05 57 views
1

我想的表下方显示内容,从一个JSON文件,相对于到项目的用户表中的角JS - 根据项目更改状态点击

例点击:

JSON文件

{ 
    "patentInfo": [ 
     { 
      "name": "item1", 
      "cost": "$33", 
      "date": "13/06", 
     }, 
     { 
      "name": "item2", 
      "cost": "$29", 
      "date": "02/02", 
     } 
    ] 
} 

视图 - 表

click on item 1 > DISPLAY price:$33, date:13/06

click on item 2 > DISPLAY price:$29, date:02/02

我这最后一周question问但我不认为我做它太清楚没有得到回应。我使用ui-view来显示内容,并且它是状态patents.list.item需要相对的URL,取决于用户点击的内容。任何想法如何实现这一目标?

var app = angular.module('myApp', ['ngRoute', 'angularMoment', 'ui.router', "chart.js"]); 

app.config(['$stateProvider', '$locationProvider', '$urlRouterProvider', function($stateProvider, $locationProvider, $urlRouterProvider) { 

    $urlRouterProvider 
        .when('', '/patents/list-patents') 
        .when('/', '/patents/list-patents') 
        .when('/patents', '/patents/list-patents') 
        .when('/transactions', '/transactions/current-transactions') 
        .otherwise('/patents/list-patents'); 

    $stateProvider 
    .state("patents", { 
     url: "/patents", 
     templateUrl: "templates/patents/patent-nav.htm", 
     controller: "patentCtrl" 
    }) 
    .state("patents.list", { 
     url: "/list-patents", 
     templateUrl: "templates/patents/list/list-patents.htm", 
     controller: "patentCtrl" 
    }) 

    .state("patents.list.item", { 
     url: "/patent-item", 
     templateUrl: "templates/patents/list/patent-item.htm", 
     controller: "patentCtrl" 
    }) 

控制器

app.controller('patentCtrl', ['$scope', '$http', 'patentTabFactory', 'loadPatents', '$stateParams', 'patentService', function($scope, $http, patentTabFactory, loadPatents, $stateParams, patentService) { 

    patentService.items.then(function (patents) { 

     $scope.items = patents.data; 
     console.log($scope.patents); 
     $scope.patents = patents.data[patentService.getPatentItem($scope.items, "aid", $stateParams.id)]; 

    }); 






    $scope.patent={id:null,applicationNumber:'',clientRef:'',costRenew:'',renewalDate:'',basketStatus:'', costEnd: '', nextStage:''}; 
    $scope.patents=[]; 
    $scope.submit = $scope.submit; 
    $scope.remove = $scope.remove; 

    $scope.fetchAllPatents = function(){ 
     loadPatents.fetchAllPatents() 
      .then(
      function(d) { 
       $scope.patents = d; 
      }, 
      function(errResponse){ 
       console.error('Error while fetching Users'); 
      } 
     ); 
    } 

    $scope.fetchAllPatents(); 

    $scope.deletePatent = function(id){ 
     loadPatents.deletePatent(id) 
      .then(
      $scope.fetchAllPatents, 
      function(errResponse){ 
       console.error('Error while deleting Patent'); 
      } 
     ); 
    } 

    $scope.submit = function() { 
     if($scope.patent.id===null){ 
      console.log('Saving New User', $scope.patent); 
      loadPatents.createPatent($scope.patent); 
     } 
     console.log('User updated with id ', $scope.patent.id); 

    } 

    $scope.remove = function(id){ 
     console.log('id to be deleted', id); 
     if($scope.patent.id === id) {//clean form if the patent to be deleted is shown there. 
      reset(); 
     } 
     $scope.deletePatent(id); 
    } 

    $scope.tabs = patentTabFactory.tabs; 
    $scope.currentTab = patentTabFactory.currentTab; 
    // $scope.isActiveTab = patentTabFactory.isActiveTab(); 
    $scope.onClickTab = function(currentTab) { 
     patentTabFactory.onClickTab(currentTab); 
     $scope.currentTab = patentTabFactory.currentTab; 
    }; 

    $scope.isActiveTab = function(tabUrl) { 
     return tabUrl == patentTabFactory.currentTab; 
    } 
}]); 

列表专利查看

<div class="row"> 
    <div class="col-md-12"> 
     <table class="table table-bordered table-striped text-md-center"> 
      <thead class="thead-inverse"> 
       <tr> 
        <td ng-click="patentAppOrder()" class="align-middle">Application No. </td> 
        <td class="align-middle">Client Ref</td> 
        <td class="align-middle">Cost to renew</td> 
        <td class="align-middle">Basket</td> 
        <td class="align-middle">Remove</td> 
       </tr> 
      </thead> 
      <tbody> 
       <tr ng-repeat="x in patents"> 
        <td><a ui-sref="patents.list.item">{{x.applicationNumber}}</a></td> 
        <td ng-bind="x.clientRef"></td> 
        <td ng-bind="x.costToRenew">$</td> 
        <td ng-bind="x.renewalDueDate"></td> 
        <td><button type="button" class="btn btn-danger" ng-click="remove(x.id)">Remove</button></td> 
       </tr> 
      </tbody> 
     </table> 
     <div ui-view></div>  
    </div> 
</div> 
<div ui-view></div>  

专利项目视图

<div id="tabs"> 
    <ul> 
     <li ng-repeat="tab in tabs" 
      ng-class="{active:isActiveTab(tab.url)}" 
      ng-click="onClickTab(tab)">{{tab.title}}</li> <!--applies active to the returned tab url --> 
    </ul> 
    <div id="mainView"> 
     <div class="row"> 
      <div ng-include="currentTab"></div> 
     </div> 
    </div> 
</div> 
<script type="text/ng-template" id="patent-info.htm"> 
    <div class="col-md-6 text-xs-center"> 
     <h2>Application Number</h2> 
     <table class="table table-striped"> 
      <tbody> 
       <table> 
        <tr ng-repeat="(x, y) in patents"> 
         <td ng-repeat="x.id in patents"></td> 
         <td>{{y.applicationNumber}}</td> 
        </tr> 
       </table> 
      </tbody> 
     </table> 
    </div> 
    <div class="col-md-6 text-xs-center"> 
     <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 
     </p> 
    </div> 
</script> 
<script type="text/ng-template" id="cost-analysis.htm"> 
    <div class="col-md-6 text-xs-center" ng-controller="LineCtrl"> 
     <h2>Cost Analysis</h2> 
     <canvas class="chart chart-line" chart-data="data" chart-labels="labels" 
chart-series="series" chart-click="onClick"></canvas> 
    </div> 
</script> 
<script type="text/ng-template" id="renewal-history.htm"> 
    <div class="col-md-6 text-xs-center"> 
     <h2>Renewal History</h2> 
     <p>In pellentesque faucibus vestibulum. Nulla at nulla justo, eget luctus tortor..</p> 
    </div> 
</script> 
+0

我建议你包含你已经定义了你的路线的三个控制器和模板。 –

+0

相当多的代码,我可以包括,但我认为它更多地试图找出实现这一任务的逻辑。我现在更新 –

+0

您不必包含所有内容。只是与这个问题有关的部分。例如,现在我不知道你的文章中的HTML属于哪个模板... –

回答

2

你要做的第一件事就是为路由添加一个动态URL参数,该参数应该显示关于选定专利的信息并给予另一个控制器。

.state("patents.list.item", { 
    url: "/patent-item/:name", 
    templateUrl: "templates/patents/list/patent-item.htm", 
    controller: "patentDetailsCtrl" 
}) 

然后,当您浏览该专利时,您必须在链接中包含名称(假设它是唯一标识符)。

<td><a ui-sref="patents.list.item({ name: x.name })">{{x.applicationNumber}}</a></td> 

之后,在你的patentDetailsCtrl,您可以获取有关从JSON文件中的专利信息,并显示它。

替代解决方案

另一种解决方案将处理它在你的patentCtrl而无需额外的(patents.list.item)航线。但我不会推荐这种方法。

如果您使用的是AngularJS v1.5 +,也可以使用组件。要了解更多有关组件的信息,请致电see the official documentation

+0

谢谢你的解释和例子。袒护我几分钟,让这个工作,我会接受你的答案完成后 –

+0

所有排序。再次感谢你! –

+0

太棒了!乐意效劳。 –