【问题标题】:Updating nested array value when child array is updated with $promise results使用 $promise 结果更新子数组时更新嵌套数组值
【发布时间】:2015-02-26 19:25:17
【问题描述】:

我正在使用 FullCalendar 组件构建一个调度程序应用程序,该组件从嵌套数组模型 $scope.eventSources 提供事件,该数组模型包含多个事件子数组(gDataService.events 就是其中之一)。它使用受此 plunkr 示例启发的 $resource。 http://plnkr.co/edit/pIDltQRV6TQGD4KQYnj7?p=preview.

当下面的控制器第一次运行时,gDataService.events 被分配了函数(start, end, callback)... 作为它的值,并且 $scope.eventSource 被分配了一个包含 1 个元素的数组(也就是函数)。问题是当 calFactory 通过 $resource 成功地从服务器中提取数据时,gDataService.events 会正确填充事件数据,但 $scope.eventSource 没有(即仍然保留 1 个函数元素的旧值)。我尝试了 $scope.$apply,但它抱怨摘要已经在进行中。

非常感谢您的帮助。

myApp.controller("MainCtrl", function($scope,$compile,uiCalendarConfig, calFactory, gDataService)     {

var getEventSuccessCallback = function (data, status) {
    gDataService.events = function(start, end, callback) {
        var events;
        events = data.query({
          start: start,
          end: end
        });

        events.$promise.then(function(value){
           gDataService.events = value ;
          callback(gDataService.events);
    };

    $scope.eventSources = [gDataService.events];

};
})
myApp.factory("calFactory",['$resource', function($resource) {
    return {
        getEvents: function () {
            return $resource("/caldata/?c=to1_list",{});
    }
};
}]);

【问题讨论】:

  • 您正在分配一个数组,其方法包含对$scope.eventSources 的回调,这是有意的吗?你就不能$scope.eventSources = events吗?

标签: javascript arrays angularjs promise


【解决方案1】:

原因是$scope.eventSources = [gDataService.events]; 是在函数内部定义的,应该在控制器中定义,在函数外部。试试这个:

myApp.controller("MainCtrl", function($scope,$compile,uiCalendarConfig, calFactory, gDataService) {

    var getEventSuccessCallback = function (data, status) {
        gDataService.events = function(start, end, callback) {
            var events;
            events = data.query({
               start: start,
               end: end
            });

            events.$promise.then(function(value){
               gDataService.events = value ;
              callback(gDataService.events);
            };
     };

     $scope.eventSources = [gDataService.events];
});

您似乎有一个括号问题,因为我看到您还在控制器内定义了一个工厂。

【讨论】:

  • 感谢您的及时回复。我按照您的建议将它放在函数定义之外,但无济于事。
  • 关于括号问题,我忘了把结尾括号放在这里。已编辑。
  • @javvvva 无论如何你可以设置你的代码的plnkr?
猜你喜欢
  • 2019-05-18
  • 2018-10-22
  • 2016-05-03
相关资源
最近更新 更多