2015-01-15 5 views
2

지침에서 컨트롤러로 양방향 데이터 바인딩이 필요합니다. 지침은 ng-repeat를 사용합니다. 몇 가지 시도했지만 지시기 범위 변수를 컨트롤러에 반영 다시 가져올 수 없습니다. 내가 실종 무엇 http://jsfiddle.net/keshav89/sezknp1t/1/AngularJS : 양방향 데이터 바인딩 - ng-repeat 명령 - 작동하지 않음

:

angular.module("myApp", []) 
.controller("Ctrl1", function ($scope) { 
    $scope.crossTabs = [1,2,3,4,5]; 
}) 
.directive("crossTab", function() { 
    return { 
     restrict: "E", 
     template: "<input type='text' ng-model='crossTab'/><button ng-click='changeLols()' id='clc'>change crossTabs</button>", 
     scope: { 
      crossTabs: '=', 
      crossTab: '=' 
     }, 
     controller: function($scope){ 
      $scope.changeLols = function(){ 
       // The below comment line is not working. It doesnt change anything. But the one uncommented which pushes an element updates the controllers 'crossTabs' variable as well. 
       //$scope.crossTabs = [3,4,5]; 
       $scope.crossTabs.push(6);     
      } 
     }, 
     link: function (scope, elem, attrs) { 

     } 
    } 
}); 

HTML 여기

<div ng-app="myApp" ng-controller="Ctrl1"> 
    <div> Controller: {{ crossTabs }}</div><br> 
    <h5>Directive Section below</h5> 
    <cross-tab ng-repeat="crossTab in crossTabs" cross-tab="crossTab" cross-tabs="crossTabs"></cross-tab> 
</div> 

는 jsfiddle입니다. 나는 링크 기능을 사용해 보았지만 아무 소용이 없었다.

+1

우리가 알고있는 ng-repeat는 부모 (이 경우 컨트롤러)의 범위를 상속하지만 자신의 경우에 'crossTab'의 값인 새 속성으로 프로토 타입 상속을 만듭니다. 크로스 탭은 컨트롤러 범위이지만 crossTabs 않습니다. – squiroid

+0

음. 그래서 문제는 디렉티브에서 crossTabs 변수를 변경하여 상위 컨트롤러의 범위에 반영하도록하려는 것입니다. 그것에 대해 어떻게 가야합니까? –

+0

@ 스퀴 로이드 지금 당신이 말하려고했던 것을 알게되었습니다. 고마워요 –

답변

5

이 같은 객체에 넣어 :

$scope.viewModel = { 
    crossTabs: [1, 2, 3, 4, 5] 
}; 

과 :

<cross-tab ng-repeat="crossTab in viewModel.crossTabs" cross-tab="crossTab" cross-tabs="viewModel.crossTabs"> 

데모 : 프로토 타입 상속과 AngularJS와 관련http://jsfiddle.net/fzz9xabp/

좋은 대답은 here를 찾을 수 있습니다.

+0

감사합니다. 그것은 효과가 있었다. 그리고 나는 그 문제를 잘 이해했다. –

+0

당신은 환영합니다 :) – tasseKATT

+1

Great work @tasseKATT – squiroid

관련 문제