重构角度bootstrap ui模态到工厂

时间:2015-06-21 22:00:32

标签: angularjs angular-ui-bootstrap bootstrap-modal

我正在努力重构我现有的代码。我的控制器开始变得无法管理。我正在使用ui bootstrap。我找到了一个类似于我正在做的帖子How to close Angular UI Modal from anywhere

这是我正在连接数据库的工厂函数。我在模态控制器的成功中识别它

function updateDrink(id,payload){
// need a payload for put and for post
return $http.put('/api/drink/'+id,payload).
  success(function(data){
    console.log(data);
    return data;
  }).
  error(function(data){
    console.log('error');
  });

}

这是我的原始代码。我把所有这些放在一个控制器里一切正常。我有模态工作,我正在获取数据。

$scope.modalUpdate = function(size,selectedDrink) {
console.log(selectedDrink);

  var modalInstance = $modal.open({
    animation: $scope.animationsEnabled,
    templateUrl: 'templates/editCaffeineDrink.html',
    controller: function($scope,$modalInstance,drink,DrinkLibrary,Drink){
      $scope.drink = drink;

      $scope.ok = function(id){
          DrinkLibrary.updateDrink(id,$scope.drink).
          success(function(data){
          console.log(data);
        });
          $modalInstance.close($scope.drink);
    };

      $scope.cancel = function(){
        $modalInstance.dismiss('cancel');
      };
    },
  size: size,
    resolve: {
            // resolve the drink
      drink: function () {
              // return selected drink
          return selectedDrink;
      }
    }
});
  // end of mal instance/modal open

modalInstance.result.then(function (selectedItem) {
      $scope.selected = selectedItem;
},  function () {
      $log.info('Modal dismissed at: ' + new Date());
    });
};

这是我的点击处理程序我正在调用模态更新,并且每次点击都正确地更新了我的数据库。

<a href="" ng-click="modalUpdate('lg',drink)">
    <i style="font-size:18px;" class="fa fa-pencil-square-o"></i>
</a>

这是我现在的工厂。我得到模式下拉,显示正确的数据。但是,我没有更新我的信息。

app.factory('ModalService', ['$modal', '$modalStack',function($modal, $modalStack) {
return {
  trigger:function(selectedDrink){
    var modalInstance = $modal.open({
          templateUrl: 'templates/editCaffeineDrink.html',
          controller: function($scope,$modalInstance,drink,DrinkLibrary,Drink){
          $scope.drink = drink;
              $scope.ok = function(id){
                DrinkLibrary.updateDrink(id,$scope.drink).
                success(function(data){
                console.log(data);
              });
                $modalInstance.close($scope.drink);               };

              $scope.cancel = function(){
                $modalInstance.dismiss('cancel');
            };
          },
          size: 'lg',
          resolve: {
                // resolve the drink

              drink: function () {
                return selectedDrink;
              }
          }
      });
      // end of modal open
  }
};
}]);

我的控制器内部正在调用工厂并触发

  $scope.update=ModalService.trigger;

然后在我的点击处理程序上,我点击并传递对象时更新。一切都出现在模态中,但模态没有更新。

 <a href="" ng-click="update(drink)">
    <i style="font-size:22px;" class="fa fa-pencil-square-o"></i>
 </a>

1 个答案:

答案 0 :(得分:0)

所有内容实际上都适用于上面的代码。我有一些问题,nodemon没有为我做更新。除了上面发布的链接,我还通过Bossable从30天平均堆栈挑战中得到了一些想法。