在弹出窗口中使用$ scope(AngularJS + Ionic)

时间:2014-10-23 23:04:13

标签: javascript angularjs ionic-framework

我跟着documentation在我的项目中设置了一个Ionic弹出窗口。 除了一件事,这很有效。

当我调用该函数时,我不在控制器中(我在services.js中),所以当我定义范围:$ scope时,我有一个明显的$ scope是未知错误。

你是如何解决这个问题的?非常感谢!

如果需要,请查看完整代码。

controllers.js

$scope.confirm_redeem_reward = function(asked_reward) {
      RewardModel.displayConfirmRedeemReward(asked_reward)
    };

services.js

...

  RewardModel.displayConfirmRedeemReward = function(asked_reward) {
     var confirmPopup = $ionicPopup.confirm({
       title: 'Confirmation',
       templateUrl: 'templates/popups/confirm_redeem_reward.html',
       scope: $scope,
       buttons: [{
          text: 'Cncel',
          type: 'button-default'
        }, {
          text: 'OK',
          type: 'button-positive',
          onTap: function(e) {
            RewardModel.useReward(asked_reward.id);
            RewardModel.used_reward_or_deal_name = asked_reward.name;
          }
        }]

     });
     confirmPopup.then(function(res) {
       // Nothing
     });
    };

confirm_redeem_reward.html

您想兑换奖励:
{{ask_reward.name}}?

2 个答案:

答案 0 :(得分:1)

我遇到了同样的困境,无论是使用控制器还是服务。我觉得服务是一个稍好的解决方案,因为弹出窗口的控制器已经包含在ionicPopup函数中。 (即我没有写控制器,我只是委托给ionicPopup) 所以我现在通过将rootScope注入服务并自己创建范围来修复它:

    return {
        showPopup: function () {
            var $scope = $rootScope.$new();
            $scope.data = {};

在服务中使用UI内容仍然感觉很尴尬,因此我可以选择其他方式。

斯蒂芬

答案 1 :(得分:0)

我认为你在错误的地方使用弹出窗口。您必须分离功能并显示弹出窗口是一个必须在控制器中的功能。

如果你这样做,它将完美地运作;)