如何重新运行/重新加载控制器的一部分?

时间:2016-01-11 08:24:06

标签: javascript angularjs

在以下Angular控制器中,$q.all获取一个保存在$scope.building中的JSON树。然后使用$scope.building创建panopanodata

JS:

angular.module('yoApp')
  .controller('addPanoCtrl', function($q, $scope, $rootScope, $routeParams, serviceUpload) {
    $scope.buildingId = $routeParams.buildingId

    $q.all([
      serviceUpload.getAllBuilding()
    ]).then(function(value) {
      var buildingJSON = _.where(JSON.parse(value), {'objectId': $scope.buildingId})
      $scope.building = buildingJSON[0]
    }, function(reason) {
      $scope.result = reason
    })

    // Methods

    $scope.addPano = function() {
      // SOME CODE
      pano.save(json, {
    success: function(object) {
      $scope.building.pano.push(json)
      $scope.panoName = ''
      $scope.$digest()
    },
    error: function(object, error) {
    }
      })
    }

    $scope.addPanodata = function(panoId) {
      // SOME CODE
      panodata.save(json, {
    success: function(object) {
      $scope.pano.panoData.push(json)
      $scope.panodataName = ''
      $scope.$digest()
    },
    error: function(object, error) {
    }
      })
    }
  })

HTML:

   <div class="col-md-3" ng-repeat="pano in building.pano">
    <!-- SOME CODE -->
    <a class="btn btn-primary" href="javascript:;" ng-click="addPanodata(pano.objectId)">Add</a>

保存pano没有问题,因为我有$scope.buildingId。保存panodata时出现问题。如果我创建pano,然后创建panodata我就不能,因为$scope.building没有新的pano

如果我重新加载页面,panodata会被保存,但我在想是否只能重新加载$q.all位,以便$scope.building再次使用新创建的{{1}获取}}

在AngularJS中实现此目的的常用方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以将数据提取到函数中,然后在需要更新数据时再次调用它,例如在$scope.addPanodata()