0
<div ng-controller="ctrl1"> 
    <form name="form1" ng-submit="submitForm()"> 
     <input type="text" name="email" /> 
    </form> 
</div> 

<div ng-controller="ctrl2"> 
    <button> Submit </button> 
</div> 
CTRL 2

在这里,我想触发表单提交动作的形式,这是CTRL 1Angularjs - 如何从不同的控制器提交表单?

如何angularJs实现这一目标?

+0

你只是在CTRL2提交按钮? – Natiq

+1

可能最直接的方法是在$ rootScope上发出一个事件,就像这里回答http://stackoverflow.com/a/19498009/3459298。如果你想避免这种情况,比如说你不想监督rootScope或者你担心性能,或许你想选择实现你的事件总线作为服务,这里也指定http://stackoverflow.com/ a/27410307/3459298。 –

+0

这个例子肯定会帮助你使用$ controller服务从不同的控制器提交。检查你会发现的样本...---> [从不同的控制器提交](http://stackoverflow.com/questions/40477112/ionic-angularjs-calling-methods-via-template-outside-of-controller/40483559#40483559) –

回答

0

您可以在按钮单击时发出事件,然后使用rootcope将其广播下来 - 然后ctrl1可以侦听此事件并提交表单作为响应。

0

您可以从第二个控制器发出一个事件并在第一个控制器中收听它。

function CtrlOne($rootScope) 
 
{ 
 
    $rootScope.$on('submitEvent', function(event, args) { 
 
     //submit your form here 
 
    }); 
 
} 
 

 
function CtrlTwo($scope,$rootScope) 
 
{ 
 
    $scope.submit=function(){ 
 
    $rootScope.$emit('submitEvent', args); 
 
    } 
 
}
<div ng-controller="CtrlOne"> 
 
    <form name="form1" ng-submit="submitForm()"> 
 
     <input type="text" name="email" /> 
 
    </form> 
 
</div> 
 

 
<div ng-controller="CtrlTwo"> 
 
    <button ng-click="submit()"> Submit </button> 
 
</div>

+0

我看不出这个例子是如何工作的。这两个控制器在不同的作用域中(事件不会到达同级作用域),并且由于控制器实例未使用'as'语法发布,所以submit功能不可访问。 –

0

可以实现使用$rootScopeservicesevent brodcasting

app.controller('ctrl2',['$scope','$rootScope',function($scope,$rootScope) { 
    $scope.submitForm = $rootScope.mainSubmit(); 
}]); 

app.run(function($rootScope){ 
    $rootScope.mainSubmit =function(){ 
     console.log("hey"); 
    }; 
}) 
相关问题