2016-08-06 2 views
0

TLDR 수정 : 나는 확인란과 양식을 가지고 https://plnkr.co/edit/HfRoCgPfdoZNxmTtDLf7?p=preview사용 NG 반복 잘못 객체에게

: 여기에 문제의 plnkr의

임대 객체를 수정하는 것입니다
<div class="form-group"> 
    <div class="input-group"> 
    <div class="checkbox"> 
     <label> 
     <input type="checkbox" ng-model="rental.car2go.airport.berlin"> Berlin 
     </label> 
     <br/> 
     <label> 
     <input type="checkbox" ng-model="rental.car2go.airport.hamburg"> Hamburg 
     </label> 
     <br/> 
    </div> 
    </div> 
</div> 

. 와

<div class="form-group"> 
    <div class="input-group"> 
    <div class="checkbox"> 
     <span ng-repeat="airport in airports"> 
    <label> 
     <input type="checkbox" 
      ng-model="airport.model"> 
       {{airport.name}} 
     </label> 
     <br> 
     </span> 
    </div> 
    </div> 
</div> 

양식이 공항은 (airports[1].model=true/falseairports[2].model=true/false를) 오브젝트 수정하는 것입니다 NG가 반복 :

angular.module('c2gyoApp', []).controller('c2gyoAppController', [ 
'$scope', 
'state', 
function($scope, state) { 
    $scope.airports = [{ 
    "name": "Berlin", 
    "model": "rental.car2go.airport.berlin" 
    }, { 
    "name": "Hamburg", 
    "model": "rental.car2go.airport.hamburg" 
    }, ]; 

    $scope.rental = state.rental; 

}]).factory('state', function() { 

var rental = { 
    car2go: { 
    airport: { 
     berlin: false, 
     hamburg: false 
    } 
    } 
}; 

return { 
    rental: rental 
}; 
}); 

가 지금은 NG 반복을 사용하려면이 컨트롤러가 보이는 방법이다.

공항 객체 (rental.car2go.airport.berlinrental.car2go.airport.hamburg)의 문자열 만 사용해야하며 렌털 개체를 수정해야합니다. 공항 객체가 아닌 ng-model에 문자열을 전달할 방법을 찾고 있습니다. 어떻게해야합니까?

편집 : 지침, 새로운 plnkr을 제거

+0

는 명확하지 않다. 체크 박스의 ** 값 **은 '참'또는 '거짓'이므로 대체 할 수 있습니다 (두 예제 모두에서). – FDavidov

+0

아마 제대로 작동하고 있지만 원하는 방식은 아닙니다.) plunkr (https://plnkr.co/edit/HfRoCgPfdoZNxmTtDLf7?p=preview)을 확인하십시오. 다른 오브젝트 (rent.car2go.airport.xxx)를 수정하고 싶습니다.)를 ng-repeat (공항)로 전달하는 것보다 – mles

+1

angular는'ng-model'을 바인딩하는 이런 방식을 지원하지 않습니다. 'ng-modelOptions' getter/setter를 사용하는 것과 같은 몇 가지 옵션을 약간 실험했지만 작동하는 옵션을 찾을 수 없었습니다. 체크 박스를'airport'의 속성에 바인드하고'ng-click' 함수로 값을'rental' 배열에 복사하는 등의 작업을해야 할 것입니다. – Claies

답변

0

실제로 @Claies가 임대 배열에 값을 복사해야한다고 제안했습니다. 나는 그것에 대해 ng-change 함수를 사용했다. 새로운 NG 반복 : 컨트롤러에서

<span ng-repeat="airport in airports"> 
    <label> 
    <input type="checkbox" 
      ng-model="airport.model" 
      ng-change="changeAirport(airport)"> 
    {{airport.name}} 
    </label> 
    <br> 
</span> 

: 당신이 제대로 작동하지 않는 것을 주장하는 이유

$scope.changeAirport = function(airport) { 
    var airportName = $filter('lowercase')(airport.name); 
    state.rental.car2go.airport[airportName] = airport.model; 
} 
0

당신이 변화하는 JSON은 다음과 같습니다

$scope.airports = [{ 
    "airport": "Berlin", 
    "model": "rental.car2go.airport.berlin" 
    }, { 
    "airport": "Hamburg", 
    "model": "rental.car2go.airport.hamburg" 
    }, ]; 

곳`공항 [0] .MODEL = "rental.car2go.airport.berlin" , 문자열을 의미 rent.car2go.airport.berlin. 이 문자열은 TRUE 또는 FALSE로 바뀝니다. 제 생각에 당신은 rent.car2go.airport.berlin이 구조체로 해석 되리라고 예상 했습니까? 음, 구조가 아니라 문자열입니다.

+0

그래, 나는 그것을 기대하고 있었다. 그렇다면 'rental.car2go.airport.berlin' 객체가 수정 된 것처럼 보이는 솔루션은 어떻게 될까요? – mles

+0

"공항"과 "모델"처럼 각 요소가 사실 객체가되도록 JSON을 적절히 구조해야합니다. – FDavidov

+0

'$ scope.rental'과'$ scope.airports'는 다른 객체로 남아 있어야합니다. – mles