重新加载数据并通过过滤器传递

时间:2015-11-22 09:32:24

标签: angularjs

我一直在寻找一段时间,但没有发现任何符合我具体问题的内容。

我的情景: 我有一个事件列表,我使用ng-repeat在表格中显示。每个活动都有一个状态。 要仅显示新事件,我使用过滤器。 查看新事件时,用户可以按一个按钮将状态更改为“完成”。我希望该特定事件从“新”过滤器中消失。

我成功地添加了一个getEvents来重新加载来自服务器的数据,但它不会在我的视图上更新

这是我的代码:

角:

app.controller('EventsController', ['$http', '$log', function($http, $log) {
    var info = this;
    info.events = [];

    this.getEvents = function(){
        $http.get(serverUrl+"/api/GuiEventInfos").success(function(data){
            info.events = data;
    }
}



app.controller('StatusController',['$http', function($http) {
      this.updateStatusDone = function(eventid, newStatus){
        var requestData = {"event-id":eventid, "new-status-id":2};
        $http.put(serverUrl+"/event", requestData).success(function(){
          info.getEvents();
        });
      } ...

应用过滤器的Html:

...
<li ng-click="toggle = !toggle; statusFilter = { '': 'new', 'new':''}[statusFilter]">
...

显示表格的HTML:

<tr ng-repeat="event in EventsCtrl.events | filter:searchText | filter:statusFilter | orderBy:orderParam">
    <td class="center">
        <a ng-click="status.updateStatusDone(event.eventid)" class="btn-in-table" href="#">
            <i class="glyphicon glyphicon-ok"></i>  
        </a>

我也尝试将数据绑定到模型,希望模型更改时,它会在视图中更新... 已添加<tr ng-model="EventsCtrl.events"... 我确信有一些非常简单的东西我错过了!

谢谢你的帮助

编辑:添加了EventsController的角度代码

1 个答案:

答案 0 :(得分:0)

未经测试但如果要将视图从控制器更新到另一个,请考虑使用$ scope。$ emit('event',args); :

app.controller('EventsController', ['$http', '$log', function($http,$log) {
  this.events = [];
  var info = this;
  $scope.$on('needUpdate', function(event, args) {
    $http.get(serverUrl+"/api/GuiEventInfos").success(function(data){
      info.events = data;
    }
  }
}]);


app.controller('StatusController',['$http', function($http) {
    this.updateStatusDone = function(eventid, newStatus){
      var requestData = {"event-id":eventid, "new-status-id":2};
      $http.put(serverUrl+"/event", requestData).success(function(){
            $scope.$emit('needUpdate', args);
      });
}]);

如果它不起作用,我会进一步看到。