我有一个控制器使用2 ng-include(尝试文件和脚本)更改其视图。一个用于查看,另一个用于编辑屏幕。
<div class="content-area">
<div class='row'>
<div class="cs-info">
<fp-info-bar config="headerConfig"></fp-info-bar>
<ng-include src="currentTemplate"></ng-include>
</div>
</div>
视图模板没有输入。编辑模板有一个4 ng表单,它们自己包含输入和自定义指令。
<ng-form name='premisesAddressForm' attempt>
<div has-permission='CustomerDetailEditOverrideAddressValidation'>
<input type="checkbox" ng-model="isPremisesAutoCorrectDisabled"><span>Turn off Auto Correct</span>
</div>
<fp-address-edit
states="states"
ng-model='customer.PremisesAddress'
on-change="validateAddress(customer.PremisesAddress, premisesAddressForm, isPremisesAutoCorrectDisabled)">
</fp-address-edit>
</ng-form>
在编辑模式下使用in指令,数据成功填充,其他工作也正常。
问题:当我尝试在父控制器上保存数据并检查范围时,我在编辑模板上找不到任何表单(premisesAddressForm)或其他输入字段。即此$scope.premisesAddressForm
不存在。为了说清楚,保存按钮位于同一个模板上并绑定到父控制器上的功能,没有问题。我尝试在父控制器中创建对象,但没有用。
$scope.forms = {};
<ng-form name='froms.premisesAddressForm' attempt>
我知道ng-include创建自己的范围(继承父级),但我不是试图在子级上获取父对象,所以没有问题。我还读了一些在ng-include更改之后的地方,Angular编译并更新了范围。对我来说存在问题。我该如何让它发挥作用?如果我的方法一起出错,请随时指出。我的目标是为不同的视图使用相同的控制器,使用不同的输入或不输入。感谢
答案 0 :(得分:0)
你是对的,ngInclude会创建一个新的子范围。问题是父作用域不能访问子作用域属性。你能做的就是你尝试过的一样,但是不应该把表单传回父控制器,你应该将值传回去。
在您的父控制器中:
$scope.myObj = {
customer: {}
};
在你的模板中:
<ng-form name='premisesAddressForm' attempt>
<div has-permission='CustomerDetailEditOverrideAddressValidation'>
<input type="checkbox" ng-model="myObj.isPremisesAutoCorrectDisabled"><span>Turn off Auto Correct</span>
</div>
<fp-address-edit
states="states"
ng-model='myObj.customer.PremisesAddress'
on-change="validateAddress(myObj.customer.PremisesAddress, premisesAddressForm, myObj.isPremisesAutoCorrectDisabled)">
</fp-address-edit>
</ng-form>
如果您需要控制器在保存期间进行通信(例如启动验证),您可以使用事件。