我为$modal.
实现自己的包装器而不是在controller
中打开它我想在service
中执行此操作,然后将此服务注入其他组件
mainApp.factory('modalsService', ['$modal', function($modal) {
return {
show: function(text) {
var modalInstance = $modal.open({
templateUrl: "modals/modal-template.html",
controller: "modalCtrl",
resolve: function() {
return text
}
});
}
}
}])
mainApp.controller('modalCtrl', ['$scope', '$modalInstance', 'text',
function ($scope, $modalInstance, text) {
alert(text)
$scope.msg = text
$scope.confirm = function() {
$modalInstance.close()
}
}])
我的问题在alert(text)
- 它打印“未定义”。由于某种原因,我无法将此文本从服务传递给控制器。
答案 0 :(得分:1)
您的代码应该是:
mainApp.controller('Ctrl',
function ($scope,modalsService ) {
var text = 'your message'
$scope.openModel = function() {
modalsService.show(text)
}
});
并且,将modalCtrl更改为,
mainApp.controller('modalCtrl', ['$scope','$modalInstance','text',
function ($scope, $modalInstance, text) {
alert(text)
$scope.msg = text
$scope.confirm = function() {
$modalInstance.close()
}
}])
答案 1 :(得分:1)
您需要修复resolve
部分服务:
var modalInstance = $modal.open({
templateUrl: "modals/modal-template.html",
controller: "modalCtrl",
resolve: {
text: function() {
return text;
}
}
});
请注意您是如何明确告诉您希望控制器注入text
。
然后你可以在任何这样的控制器中使用它:
modalsService.show('This is a text');