我需要在bootstrap模态的隐藏事件上调用Angular函数。
这是我的隐藏事件处理程序:
$('#modalAddAction').on('hidden.bs.modal',
function (e) {
console.log("in hidden.bs.modal");
var $rootScope = angular.element(document.querySelector("[ng-controller=actionsController]")).scope();
if ($rootScope) {
$rootScope.$apply(function () {
$rootScope.initializeAt1();
});
}
});
这是我需要调用的控制器中定义的函数:
$scope.initializeAt1 = function () {
$scope.data.addAction.actionTypeId; // initialized in $scope.getActionTypes
$scope.data.addAction.actionStatus = 1;
// initializers help set drop downs to appropriate selection.
$scope.data.addAction.actionType1.actionRecommendedByLerId = 0;
$scope.data.addAction.actionType1.actionsRecommendedByLer = [];
$scope.data.addAction.actionType1.actionProposedBySupervisorId = 0;
$scope.data.addAction.actionType1.actionTakenBySupervisorId = 0;
$scope.data.addAction.actionType1.actionChargeId = 0; // formerly initialized in $scope.getActionCharges
$scope.data.addAction.actionType1.actionCharges = [];
}();
因此,第一次运行控制器工厂时,initializeAt1函数调用自身并进行我需要的初始化。
然后,每当隐藏模态时,我都会尝试再次调用initializeAt1,无论是从保存按钮,取消按钮还是只是单击屏幕。
#modalAddAction - 隐藏事件在这里给出了这个错误:
[$rootScope:inprog] $digest already in progress
所以现在我尝试将事件处理程序改为此(注释掉apply并直接从$ rootScope调用该函数):
$('#modalAddAction').on('hidden.bs.modal',
function (e) {
console.log("in hidden.bs.modal");
var $rootScope = angular.element(document.querySelector("[ng-controller=actionsController]")).scope();
//if ($rootScope) {
//$rootScope.$apply(function () {
$rootScope.initializeAt1();
//});
//}
});
现在我收到了这个错误。
$rootScope.initializeAt1 is not a function
所以我有rootScope,但为什么看不到这个函数?
答案 0 :(得分:0)
我明白了。 它只是不喜欢定义后自我调用的函数。 当我检查$ rootScope的$ scope时,initailizeAt1被列为未定义。
不得不把()带到最后。
添加电话:
$scope.initializeActions = function () {
$scope.initializeAt1();
}
$scope.initializeActions();
最后。
然后将为At2,At3等添加init以初始化动作。