在我的控制器中,我有以下数据:
(function() {
'use strict';
angular
.module('myappl.mymodule')
.controller('MyController', MyController);
MyController.$inject = ['$scope', 'myService'];
function MyController($scope, 'myService') {
$scope.vm = this;
var vm = this;
vm.myService = myService;
vm.userManagement = userManagement.data;
vm.userManagementSomeDataObjects = vm.userManagement.someDataObjects;
在这个控制器的某个地方,我有一个函数,它首先从后端获取数据,然后调用 showModal :
function modalForUserInteraction() {
vm.myService.getData(parameters).success(function(data) {
vm.modalService.showModal(data, vm.userManagement, vm.userManagementSomeDataObjects);
}).error(function(data) {
console.log('error');
});
}
模态控制器如下所示:
...
function showModalService($modal, $stateParams, otherService) {
var service = {
showModal: showModal
};
return service;
////////////
function showModal(data, userManagement, userManagementSomeDataObjects) {
var myModal = $modal.open({
controller: ModalController,
controllerAs: 'vm',
windowClass: "modal fade in",
resolve: {
userManagement: function() {
return userManagement;
},
userManagementSomeDataObjects: function() {
return userManagementSomeDataObjects;
}
},
templateUrl: 'url/to.html'
});
return myModal;
并且在模态控制器中有一个像这样的方法:
function ModalController(userManagement, userManagementSomeDataObjects) {
var vm = this;
...
function doSomeActionAfterButtonClickAtModal() {
otherService.getDataFromBackend(params).success(function(data) {
userManagement = data;
userManagementSomeDataObjects = data.someDataObjects;
})error(function(data) {
console.log('error');
});
}
如果我这样做:
userManagement = data; 和 userManagementSomeDataObjects = data.someDataObjects; ,但未设置新数据。
如果我分别设置对象的每个属性,而不是经常工作,但有些情况则不然。
我现在的问题是我能做些什么才能让它发挥作用。 目前我的模态中没有$ scope-variable,实际上我不知道 如果 $ scopeOfModal。$ apply()会有所帮助,而且我也不知道如何从模态访问 MyController - $ scope 。
对于这方面的任何暗示,我都很高兴。
非常感谢!
[编辑] 这是我当前查看的图像(右)和左侧的对象,应在设置模态函数后显示。
[编辑]
是否有任何可能性在模态控制器中将参数传递给此函数:
this.previewArchivedSchedule = function(hereINeedParamerts) {
alert('archivedScheduleIntervalContainerId: ' + hereINeedParamerts);
};
答案 0 :(得分:0)
这对我来说就像它可能与angular无关,只是与javascript变量引用有些混淆。
首先,您通过userManagement
将showModalService.showModal
从ModalController
传递到resolve
。
所以现在ModalController
引用了与showModalService
相同的对象。
但是,在ModalController
中,您重新指定userManagement
变量以指向data
。所以现在userManagement
内的ModalController
变量不再指向注入的对象,因为您已经重新分配它。这与角度双向数据绑定无关,它只是javascript变量赋值。您已丢失对原始对象的引用。
showModalService
仍然引用它通过resolve发送的实例,它不知道您在ModalController
中交换了引用。
我尝试发送一个封装您要共享的数据的对象来修复此问题。
function showModal(data, userManagement, userManagementSomeDataObjects) {
var myModal = $modal.open({
controller: ModalController,
controllerAs: 'vm',
windowClass: "modal fade in",
resolve: {
sharedData: function() {
return {
userManagement: userManagement,
userManagementSomeDataObjects: userManagementSomeDataObjects
}
},
templateUrl: 'url/to.html'
});
return myModal;
然后操纵共享对象上的属性,而不是覆盖引用。
function ModalController(sharedData) {
var vm = this;
...
function doSomeActionAfterButtonClickAtModal() {
otherService.getDataFromBackend(params).success(function(data) {
sharedData.userManagement = data;
sharedData.userManagementSomeDataObjects = data.someDataObjects;
})error(function(data) {
console.log('error');
});
}