如何刷新列表以从服务中获取新数据?

时间:2015-12-22 13:49:39

标签: javascript angularjs angularjs-directive angularjs-scope angular-ui-router

我正在尝试调用Web服务,从中接收数据并显示在列表中。我正在使用指令。

  • 当我的小提琴加载时,我从JSON加载数据。哪个工作正常。我能够加载数据。
  • 然后我点击删除按钮,我的列表为空。换句话说,我从列表中删除了所有项目。哪个工作正常
  • 现在,当我点击刷新按钮时,我需要再次拨打服务并从服务中获取最新数据。

但它没有在列表中显示为什么? 这是我的代码: https://jsfiddle.net/8fjhLqnw/10/

.controller('he', function($http, $scope, sharedData) {
    var h = this;

    h.referesh=function(){
        sharedData.get();
    }
    h.delete = function() {
        sharedData.delete()
    }
});

更新请参阅plunker

http://plnkr.co/edit/iMpStNneDmIsabTnFqpP?p=preview

我只需要点击刷新按钮即可加载 data.json 的数据并显示在列表表单上

1 个答案:

答案 0 :(得分:0)

更新了fiddle

问题是您正在刷新刷新调用中对sharedData.data的引用。 f控制器在刷新数据之前将自身绑定到sharedData.data(即vm.data = sharedData.data),并且永远不会更新vm.data引用(始终指向原始已删除的数组)。要修复,请构建对sharedData本身的引用,并从模板中访问data属性:

// continued off module definition
.directive('tm', function() {

    // reference vm.sharedData.data in the template
    return {
        restrict: 'E',
        template: '<div><ul><li ng-repeat="n in vm.sharedData.data">{{n.name}}</li></ul></div>',
        scope: {},
        controller: 'f',
        controllerAs: 'vm'

    };
}).controller('f', function($http, $scope, sharedData) {
    var vm = this;
    // initialize shared data
    sharedData.get().then(function(){
    vm.sharedData = sharedData;
    });

刷新数据时,sharedData的data属性将重置并由模板拾取,因为作用域引用了sharedData引用(不会更改)。模板将看到sharedData内部的任何更改(刷新的数据属性)。