2014-12-29 5 views
0

Я создал переменную rootScope какrootScope является upating по размаху переменного обновлению

$rootScope.globalData = data; 
$rootScope.globalData.chillerConditions.HeatSource.Value = "ST"; //Default Value 
$scope.chillerConditions.HeatSource.Value = 1;      //Default Value 

где data мое возвращение значения из API. Также создайте переменную области видимости, которая представляет собой объект, содержащий список элементов.

$scope.chillerAttributes = data.ObjCandidateListChillerAttributes; 
$scope.chillerConditions = data.ObjCandidateListConditions; 

В HTML у меня есть:

<select ng-model="chillerConditions.HeatSource.Value" style="width:53%;" ng-options="item.Id as item.Description for item in ValidRatingHeatSource" ng-change="heatSourceChanged()" id="ddRatingHeatSource" class="form-control search-select designComboboxHeight" data-container="body"></select> 

Здесь ValidRatingHeatSource является

$scope.ValidRatingHeatSource = \*list of items*\ 

Об изменении Опуститесь Я написал функцию. В этом

if($scope.chillerConditions.HeatSource.Value == 2) 
{ 
    $rootScope.globalData.chillerConditions.HeatSource.Value = "HW"; 
} 
else 
{ 
    $rootScope.globalData.chillerConditions.HeatSource.Value = "ST"; 
} 

До сих пор был моим текущим кодом. выпуск является:

Когда выше функция вызывается всякий раз, когда ток затем $rootScope varible т.е. $rootScope.globalData.chillerConditions.HeatSource.Value изменяется на "HW" или "ST" она также меняется $scope.chillerConditions.HeatSource.Value к "HW" или "ST".

Почему так?

Есть ли встроенная функциональность в angularjs? Прошу предложить, допустим ли я ошибку? Новое предложение также приветствуется.

+0

В 'нг-model' (' chillerConditions.HeatSource.Value'), может быть присоединен как к '$ scope.chillerConditions.HeatSource.Value' и' $ rootScope.chillerConditions.HeatSource .Value'. Поэтому, когда выбор изменяет, так же как и переменная, привязанная к 'ng-model'. Не уверен в этом, но стоит попробовать переименовать переменную '$ scope'. – simeg

ответ

1

Такое поведение JavaScript работает и не имеет ничего общего с AngularJS. JavaScript - это объектно-ориентированный (основанный на прототипе) язык, где объекты адресуются по ссылке, а не по значению. Например. назначить car2 для car1 и оба они будут ссылаться на один и тот же объект (JSFiddle)

var car1 = {make: "Audi"} 
var car2 = car1; 
car2.make = "Toyota"; 

Так что в вашем случае, $rootScope.globalData.chillerConditions.HeatSource и $scope.chillerConditions.HeatSource являются тем же объектом.

Скорее, похоже, что вы хотите создать копию. Вы можете сделать это с angular.Copy

$scope.chillerAttributes = angular.copy(data.ObjCandidateListChillerAttributes); 
$scope.chillerConditions = angular.copy(data.ObjCandidateListConditions); 
+0

Я понял пример JSfiddel. Прямо сейчас я не отмечу как «Принято», но как только я разрешу проблему, она будет отмечена как «Активированные Ans». благодаря – Romesh

1

В вашем примере у вас есть и ng-модель, и ng-change, так: 1. Пользовательское значение изменения в выборе. 2. $ scope.chillerConditions.HeatSource.Value изменения (нг-модель) 3. heatSourceChanged начинает (нг-изменение) -> $ rootScope.globalData.chillerConditions.HeatSource.Value меняет

Так что все работает как надо. ..

+0

Ваши анны являются объяснением выше. +1 – Romesh