2014-01-24 2 views
0

내 웹 사이트에서 AngularJS로 일부 사용자 지정 함수를 설정하려고합니다. 내가 $scope.setSelectedFilter의 시작 부분에 $scope.selectedFilters를 로그인 할 때마다

, 그것은 항상이다
.controller("MenuController", ['$scope','$log', function($scope, $log) { 
    $scope.selectedFilters = []; 

    $scope.setSelectedFilter = function() { 
     var stub = this.filter.stub; 
     if (_.contains($scope.selectedFilters, stub)) { 
     $scope.selectedFilters = _.without($scope.selectedFilters, stub); 
     } else { 
     $scope.selectedFilters.push(stub); 
     }; 
     $log.log($scope.selectedFilters); 
     return false; 
    }; 
}]) 

오전 데 문제가 있음 :

<div data-ng-repeat="filter in menu.filters" data-ng-controller="MenuController"> 
    <label>{{filter.title}}</label> 
    <input type="checkbox" data-ng-click="setSelectedFilter()" /> 
</div> 

내 컨트롤러는 다음과 같습니다 : 다음과 같이

내 출력은 빈 배열. 내 함수 끝에 $scope.selectedFilters을 기록하면 거기에 밀어 넣은 값이 들어 있지만 그 값은 유지되지 않습니다.

여러 값을 가지고있는 것으로 을 정의하면 해당 값은 내 함수가 실행될 때마다 원래 선언에서 다시 빌드되는 것과 같이 빈 배열 대신 표시됩니다.

$scope.selectedFilters 배열을 $scope.setSelectedFilters 함수에서 내가 밀어 넣은 값으로 유지하려면 어떻게합니까? http://jsfiddle.net/HAz3p/

답변

1

당신은 모든 NG-반복 사업부에 대한 새로운 컨트롤러를 초기화됩니다

는 여기에 문제를 보여주는 바이올린입니다. 그래서 세 개의 체크 박스는 컨트롤러를 공유하지 않습니다. 그들은 그들 자신의 분리되어있다. 여기

는 고정 코드

<div data-ng-controller="MenuController" > 
<form> 
<div data-ng-repeat="filter in menu.filters" > 
    <label>{{filter.title}}</label> 
    <input type="checkbox" data-ng-click="setSelectedFilter()" /> 
</div> 
</form> 
</div> 
입니다

http://jsfiddle.net/HAz3p/1/

-1

이 당신의이 작은 문제에 대한 복수 응답 있습니다 는하지만 가장은 다음과 같습니다 이 공장을 정의하고 그 공장에 "selectedFilters를"초기화 한 번만 초기화됩니다.

.factory('myfactory', function(){ 
var selectedFilters = {}; 
return selectedFilters; 
}); 

.controller("MenuController", ['$scope','$log', function($scope, $log, myfactory) { 
$scope.selectedFilters = myfactory; 
... 
... 
}]); 

"myfactory"를 선언하면 해당 팩토리에서 빈 객체를 반환합니다 (예 : selectedFilters).

$scope.selectedFilters = myfactory;// myfactory contains the object returned from factory ans stored into the scope of the controller, now it would be initialized only once. 
관련 문제