使用ng-include更改视图模板后的父范围

时间:2014-08-25 14:39:17

标签: angularjs angularjs-directive angularjs-scope

我有一个控制器使用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编译并更新了范围。对我来说存在问题。我该如何让它发挥作用?如果我的方法一起出错,请随时指出。我的目标是为不同的视图使用相同的控制器,使用不同的输入或不输入。感谢

1 个答案:

答案 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>

如果您需要控制器在保存期间进行通信(例如启动验证),您可以使用事件。