我正在尝试使用Angular Bootstrap中的modal指令弹出一个对话框,更改一个值(传入),然后检索它。
但是,由于某种原因,值永远不会在范围内更新。事实上,如果我进行“更改”并在其中加入断点,那么似乎由于某种原因会创建另一个范围的范围。
我在这里创建了一个plunker:http://plnkr.co/edit/Vy6gLgOJbWcLsHJtaGpV?p=preview
我对此感到困惑。有什么想法吗?
答案 0 :(得分:19)
Javascript按值传递基元(例如整数)。因此,当您从resolve函数返回一个整数或将其作为函数参数接受时,您将使用原始整数的副本。因此,更改它(就像在弹出窗口中一样)将对原始文件没有任何影响。
对此的解决方案是使用一个对象,然后传递它。例如而不是整数'小时',使用对象时间:
$scope.time = {
hour: 12
};
并确保在resolve对象中使用它:
resolve : {
time : function() {
return $scope.time;
}
}
您可以在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;
};
};