离子 - 在工厂内的$ ionicPopup.show中没有返回值$ scope

时间:2016-01-21 09:34:54

标签: javascript angularjs scope ionic-framework ionicpopup

我使用$ionicPopup创建了一个项目。我将$ionicPopup代码放在.factory中。在我的$ionicPopup.show()中,我要求用户输入一个值。在用户输入了值之后,它将提醒用户所写的值。

我还检查了以下帖子,但仍然无法解决我的问题Access scope inside an angular js factory

所以这是我的代码:

控制器

.controller('PopupCtrl',function($scope, $ionicPopup, $timeout, popupService) {

 // Triggered on a button click, or some other target
 $scope.showPopup = function() {

   var showParameter = {
     title: "Test",
     cssClass: "",
     subTitle: "Insert any value",
     template: '<input type="text" ng-model="value">',
     templateUrl: "",
     buttons: {
       cancelText: "Reject",
       cancelType: "button-assertive",
       okText: "Accept",
       okType: "button-positive"
     }
   }

   // An elaborate, custom popup
   popupService.show(showParameter, $scope).then(function(res) {
     console.log('Tapped!', res);
     alert("value: " + res);
   });
  };
})

工厂

.factory('popupService', function ($ionicPopup) {
    return{
        show: function(param, scope){
          var show = $ionicPopup.show({
              title: param.title, // String. The title of the popup.
              cssClass: param.cssClass, // String, The custom CSS class name
              subTitle: param.subTitle, // String (optional). The sub-title of the popup.
              template: param.template, // String (optional). The html template to place in the popup body.
              templateUrl: param.templateUrl, // String (optional). The URL of an html template to place in the popup   body.
              scope: scope, // Scope (optional). A scope to link to the popup content.
              buttons: [{ // Array[Object] (optional). Buttons to place in the popup footer.
                text: param.buttons.cancelText,
                type: param.buttons.cancelType,
                onTap: function(e) {
                  return false;
                }
              }, {
                text: param.buttons.okText,
                type: param.buttons.okType,
                onTap: function(e) {
                  // Returning a value will cause the promise to resolve with the given value.
                  return scope.value;
                }
              }]
           });
          return show;
        }
    }
 });

DEMO: http://codepen.io/aishahismail/pen/pgpdGW?editors=101

真的需要你的帮助。谢谢。

1 个答案:

答案 0 :(得分:3)

由于JS(和Angular)对象继承[1]你必须在对象中“包装”原语,所以这里是工作代码(从你的分叉):

http://codepen.io/beaver71/pen/JGMvdV

主要编辑是这些:

$scope.data = {};

...

template: '<input type="text" ng-model="data.value">'

[1] Popup从控制器继承其范围。一般来说:https://github.com/angular/angular.js/wiki/Understanding-Scopes