所以我对为什么这不起作用感到有点困惑:
我的主要Angular页面有一个名为" SearchCtrl"它包含一堆用于将搜索发送到网络服务器的逻辑。
app.controller('SearchCtrl', ['$http','$scope', function($http,$scope) {
$scope.doAlert = function() {
console.log('search page alert inside searchresultsctrl');
}
这个控制器包含在我的搜索页面上,然后在页面的某个地方有另一个控制器SearchSortModalCtrl,它将弹出一个模态并让用户做一些事情:
app.controller('SearchSortModalCtrl', function ($scope, $modal, $log) {
.....
var modalInstance = $modal.open({
templateUrl: '/modal-search-sort.html',
controller: 'SearchSortFormCtrl',
size: size,
resolve: {
items: function () {
return $scope.items;
}
}
});
它连接到此控制器:
app.controller('SearchSortFormCtrl', ['$http','$scope','$rootScope','$modalInstance', function($http,$scope,$rootScope,$modalInstance) {
$scope.cancel = function () {
$modalInstance.dismiss();
};
$scope.doAlert2 = function() {
console.log('search page alert test2');
}
所以,无论如何,我要做的是在模态表单中放置一个ng-submit,当提交该表单时,它将在SearchCtrl上做一些逻辑。
但如果我这样做
ng-submit="doAlert()"
在我的模态中,它将无法工作或向SearchCtrl发送任何内容,但如果我将其更改为doAlert2(),它当然会在SearchSortFormCtrl上运行。我试过制作它
ng-submit="$parent.doAlert()"
但没有骰子,并告诉你我甚至尝试过什么级别的fla <
ng-submit="$parent.$parent.doAlert()"
并且没有做任何事。
我做错了什么,或者如何让这个表单只是在SearchCtrl中做些什么?
答案 0 :(得分:1)
由于您的控制器是SearchCtrl
的子控制器,因此其任何后代(隔离的作用域指令除外)将自动继承doAlert
个函数。在你的情况下,你没有在模态设置中使用scope
选项,因此模态范围最终将是角度ui模态所做的$rootScope
。您可以在控制器的设置中提供范围选项。所以:
设置scope:$scope
或者如果您不想污染当前控制器范围,并使用模态控制器设置的属性设置childscope,即scope:$scope.$new()
。
var modalInstance = $modal.open({
templateUrl: '/modal-search-sort.html',
controller: 'SearchSortFormCtrl',
size: size,
scope: $scope, //Or $scope.$new()
resolve: {
items: function () {
return $scope.items;
}
}
});
范围 - 用于模态内容的范围实例(实际上,$ modal服务将创建提供范围的子范围)。默认为$ rootScope