将<div>绑定到Angular控制器的元素</div>

时间:2014-01-16 09:17:57

标签: angularjs angularjs-scope

我们在AngularJS控制器上有一个有点复杂的模型:

function controller($scope) {
    $scope.model = {
        childmodel1: {
            childmodel2: {
                property1: 'abc',
                property2: 3,
                property3: 0.5,
                property4: 'abc'
            }
        }
    }
}

在HTML标记中,我们不希望每次访问childmodel2时都重复整个访问链:

<div ng-controller="ctrl">
    <div>
        <input type="text" ng-model="model.childmodel1.childmodel2.property1" />
        <input type="text" ng-model="model.childmodel1.childmodel2.property2" />
        <input type="text" ng-model="model.childmodel1.childmodel2.property3" />
        <input type="text" ng-model="model.childmodel1.childmodel2.property4" />
    </div>
</div>

是否有一个AngularJS指令可以创建如下的子范围:

<div ng-controller="ctrl">
    <div ng-unknowndirective="model.childmodel1.childmodel2">
        <input type="text" ng-model="property1" />
        <input type="text" ng-model="property2" />
        <input type="text" ng-model="property3" />
        <input type="text" ng-model="property4" />
    </div>
</div>

ng-repeat完成的事情相同,但没有重复:)

我们尝试了ng-scopeng-controllerng-model,但这些都不是这样的。谷歌搜索没有产生任何结果,我们不知道要搜索的术语。

2 个答案:

答案 0 :(得分:2)

谢谢@Ufuk,这是我的解决方案:

mt.directive('subscope', function () {
    return {
        scope: {
            subscope: '='
        }
    };
});

<div ng-controller="ctrl">
    <div subscope="model.childmodel1.childmodel2">
        <input type="text" ng-model="subscope.property1" />
        <input type="text" ng-model="subscope.property2" />
        <input type="text" ng-model="subscope.property3" />
        <input type="text" ng-model="subscope.property4" />
    </div>
</div>

答案 1 :(得分:1)

您可以使用ng-init来取消access chain

<div ng-init="childmodel2 = model.childmodel1.childmodel2">
    <input type="text" ng-model="childmodel2.property1" />
    <input type="text" ng-model="childmodel2.property2" />
    <input type="text" ng-model="childmodel2.property3" />
    <input type="text" ng-model="childmodel2.property4" />
</div>

创建alias model。更合适的是在控制器中创建别名,如

$scope.childmodel2 = $scope.model.childmodel1.childmodel2 // and remove ng-init from HTML

Demo