2015-06-09 2 views
2

Я знаю, что мы можем создавать суб-области без создания новых контроллеров в угловом режиме, просто используя ng-repeat. , напримерВозможно ли обладать объектом в AngularJs без создания нового контроллера?

$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> 

вместо создания нового контроллера или того, чтобы использовать «ThePerson.something» на каждом связывании? Возможно ли это?

+0

Если проблема заключается в многословии, вы можете использовать псевдоним с 'ng-init', предполагая, что ссылка, которую вы передаете переменной, не изменяется из-под вас:' ng-init = "my_var = foo.bar.baz" ' –

ответ

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)); 
     } 
    }; 
}); 

Мы создаем новую область ребенка, чтобы не вмешиваться в родительской области. Затем мы расширяем область нового дочернего объекта с заданным объектом, делая свойства этого объекта напрямую доступными для области.

+0

Ничего себе милый и простой, именно то, что мне нужно. Tyvm. Хотел бы я подумать об этом раньше. – Felype

Смежные вопросы