是否可以在不创建新控制器的情况下在AngularJs中进行对象扩展?

时间:2015-06-09 13:25:30

标签: angularjs

我知道我们可以通过简单地使用ng-repeat创建子范围,而无需在角度上创建新的控制器。 例如

$scope.persons = 
    [
        {id: 0, name: "John"},
        {id: 1, name: "Jack"},
        {id: 2, name: "Jane"}
    ]

然后

<p ng-repeat="person in persons">{{id}} - {{name}}</p>

但我的问题是,我能用1个单一对象实现这个范围界定吗? 例如:

$scope.ThePerson = 
    {
        id: 0,
        name: "John",
        badgenumber: 68204,
        // ... etc
    }

然后用于:

<p ng-should-scope-to="ThePerson">
    {{id}} - {{name}}
    <input type="text" ng-model="badgenumber" />
</p>

而不是创建一个新的控制器或不必使用&#34; ThePerson.something&#34;每一个约束力? 这可能吗?

1 个答案:

答案 0 :(得分:1)

这可以使用一个非常简单的指令:

app.directive('shouldScopeTo', function() {
    return {
        restrict: 'A',
        scope: true, // a new child scope
        link: function(scope, elem, attrs) {
            angular.extend(scope, scope.$eval(attrs.shouldScopeTo));
        }
    };
});

我们创建一个新的子范围,以免干扰父范围。然后我们使用给定对象扩展新的子范围,使该对象的属性直接可用于范围。