Как изменить отдельные свойства объекта в $scope

#javascript #angularjs

#javascript #angularjs

Вопрос:

Если у вас есть в представлении что-то вроде:

 <span ng-model="foo.bar1"></span>
<span ng-model="foo.bar2"></span>
<span ng-model="foo.bar3"></span>
  

Потому что, как Angular отображает объекты, вы не можете сделать в контроллере что-то вроде:

 $scope.foo.bar2 = "something";
  

Вместо этого вам нужно сделать:

 $scope.foo = {
  bar1: "value1",
  bar2: "something",
  bar3: "value2"
}
  

Итак, если мне нужно изменить только одно свойство этого объекта, мне нужно каждый раз переназначать другие значения?

Комментарии:

1. В этом нет необходимости. Если вы инициализировали объект foo значениями по умолчанию, то вы можете получить доступ к отдельным свойствам объекта

2. Это не работает $scope.foo[bar1]=»Обновленное значение»?

3. Если вы $scope.foo инициализировали, вы можете сделать следующее $scope.foo.bar2 = "something"; . И я предполагаю, что вы уже инициализировали это.

4. Что вы подразумеваете под «как Angular отображает объекты» ?

Ответ №1:

Вообще не требуется. Все, что вам нужно сделать, это инициализировать. Ниже приведен пример кода:

В контроллере

 $scope.person ={
age: 30,
sex: 'male',
name: 'hero',
occupation: 'actor'
  

}

В HTML

  <h3>Person Details</h3>
 <p><input type="text" ng-model="person.occupation"></p>
   <span>{{person.name}},</span>
   <span>{{person.age}},</span>
   <span>{{person.sex}},</span>
   <span>{{person.occupation}}</span>
  

Теперь, если вы продолжаете изменять значение в текстовом поле, оно будет продолжать отражаться в сведениях о персонаже ниже.

Ответ №2:

Если у вас есть:

 $scope.foo = {
  bar1: "bar1Value", // any initialization value for all 3
  bar2: "bar2Value",
  bar3: "bar3Value"
}
  

или просто

 $scope.foo = {};
  

Затем вы можете сделать :

 $scope.foo.bar2 = "something";
  

После этой инициализации, где бы вы ни захотели.