从Angular Bootstrap中的模态返回值

And*_*ker 12 angularjs angular-ui-bootstrap

我正在尝试使用Angular Bootstrap中的modal指令弹出一个对话框,更改一个值(传入),然后检索它.

但是,由于某种原因,该值永远不会在范围内更新.而且,事实上,如果我进行"更改"并在其中加入断点,似乎由于某种原因创建了另一个范围的范围.

我在这里创建了一个plunker:http://plnkr.co/edit/Vy6gLgOJbWcLsHJtaGpV?p = preview

我为此感到困惑.有任何想法吗?

Mic*_*mza 19

Javascript按值传递基元(例如整数).因此,当您从resolve函数返回一个整数或将其作为函数参数接受时,您将使用原始整数的副本.因此,更改它(就像在弹出窗口中一样)将对原始版本没有影响.

解决这个问题的方法是使用一个对象,然后传递它.例如,使用对象时间而不是整数'小时':

$scope.time = {
  hour: 12
}; 
Run Code Online (Sandbox Code Playgroud)

并确保在resolve对象中使用它:

resolve : {
  time : function() {
    return $scope.time;
  }
}
Run Code Online (Sandbox Code Playgroud)

你可以在http://plnkr.co/edit/8YQGTn79AO4X7Tb7ann7?p=preview看到这个

编辑:从plnkr中提取

    var testApp = angular.module('testApp', ['ui.bootstrap' ]);

    testApp.controller('UserDataCtrl',function ($scope, $modal) {
        $scope.time = {
          hour: 12
        };
        $scope.showPopup = function() {
            $modal.open({
                templateUrl : 'popup.html',
                controller : PopupCtrl,
                resolve : {
                    time : function() {
                        return $scope.time;
                    }
                }
            }).result.then(function(result) {
                $scope.hour = result;
            });
        };

    });

var PopupCtrl = function($scope, $modalInstance, $http, time) {
    $scope.level="PopupCtrl";

    $scope.possibleTimes= [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23];

    $scope.time = time;

    $scope.ok = function() {
        $modalInstance.close($scope.hour);  
    };

    $scope.cancel = function() {
        $modalInstance.dismiss('cancel');
    };

    $scope.changing = function(){
        var x = 5;
    };

};
Run Code Online (Sandbox Code Playgroud)