2013-12-10 3 views
1

나는 http://jsfiddle.net/skwidgets/w2X9m/3/에 바이올린을 사용하여 확인란 그룹을 만듭니다. 프로토 타입에서 원하는대로 작동하며 하나 이상의 그룹을 포함 할 수 있으며 독립적으로 실행할 수 있습니다. 만족 스러우면서 필자는 내가 만들고있는 응용 프로그램에 코드를 추가하고 템플릿의 html : 지시문의 '<'이 나타나지 않습니다. 템플릿의 핸들 막대에있는 모델 데이터는 항상 수행됩니다. 나는 왜 오류가 없는지 알아 내기 위해 솔기를 짤 수가 없다.AngularJS 지시문 템플릿에 HTML이 표시되지 않습니다.

나는 또한 내가 연결되어있는 피들러에서 프로토 타입의 코드를했다 http://plnkr.co/edit/JE5dRDU4VyGd0UAbCtNu?p=preview

<div class="sqs" > 
     <pre> 
      {{survey | json}} 
     </pre> 

     <suvey-checkbox ng-model="Q1" ng-init="surveyQuestions = [ 
       { 'value':'value1', 'name': 'The unit' }, 
       { 'value': 'value2', 'name': 'Patient Threw Up'}, 
       { 'value':'value3', 'name': 'Unsafe for children' }, 
       { 'value':'value4', 'name': 'Actively dying, reached life goal'}]"> 
     </suvey-checkbox> 

     <suvey-checkbox ng-model="Q2" ng-init="surveyQuestions = [ 
       { 'value':'value1', 'name': 'The unit' }, 
       { 'value': 'value2', 'name': 'Patient Threw Up'}, 
       { 'value':'value3', 'name': 'Unsafe for children' }, 
       { 'value':'value4', 'name': 'Actively dying, reached life goal'}]"> 
     </suvey-checkbox> 
</div> 

그리고

var app = angular.module("app", []); 
app.run(function($rootScope){ 
$rootScope.survey = []; 
}); 

app.directive('suveyCheckbox', function ($rootScope) { 
return { 
    restrict: 'E', 
    require: '^ngModel', 
    scope: { 
     ngModel: '@' 
    }, 
    template: '{{ngModel}}<br /><label ng-repeat="surveyQuestion in  surveyQuestions" class="checkbox">' + 
       '<input data-role="none" type="checkbox" name="selectedExclusion[]" value="{{surveyQuestion.value}}"' + 
       'ng-checked="surveyAnswers.indexOf(surveyQuestion.value) > -1" ng-click="togglesurveyAnswers(surveyQuestion.value)"> ' + 
       '{{surveyQuestion.name}} <br /></label>{{surveyAnswers}}', 
    link: function (scope, elem, attr) { 
     // selected exclusion 
     scope.surveyAnswers = []; 

     // toggle surveyAnswers for a given answer by name 
     scope.togglesurveyAnswers = function togglesurveyAnswers(surveyQuestion) { 
      var idx = scope.surveyAnswers.indexOf(surveyQuestion); 

      // is currently selected 
      if (idx > -1) { 
       scope.surveyAnswers.splice(idx, 1); 
      } 
      // is newly selected 
       else { 
       scope.surveyAnswers.push(surveyQuestion); 
      } 
     }; 
     $rootScope.survey.push(scope.surveyAnswers); 
    } 
} 
}); 

작업 코드를 보여줍니다이 plunker을 가지고 있고 그것은 작동하지 않습니다 몇몇 이유.

+1

정확히 무엇입니까? 나는 조금 혼란 스럽다. 나는 당신의 바이올린을 가져다가 작동 시켰고, 당신의 지시어 이름에 오자를 수정했다, 당신이 'survey'대신에 'suvey'를 의미하지 않았다면, 업데이트 된 [fiddle] (http://jsfiddle.net/w2X9m/8/) – jnthnjns

+0

수정 및 작업 바이올린에 감사드립니다. 문제는 내가 만들고있는 앱에 넣을 때 같은 코드가 HTML의 template : value 값과 아무런 관련이 없다는 것입니다. 페이지에 모달 이름 (bedsideQ1, bedsideQ1)과 두 개의 빈 개체 ([], [])가 표시됩니다. 확인란은 채워지지 않습니다. 나는 이유를 알 수 없다. – skwidgets

+0

지금 당장 이유를 설명 할 수는 없지만 원판이 AngularJS 1.2를 포함하고 있었고 plunker가 1.1.5인데 원래 피들이 피들에 복사되어 다른 것들을 포함하고있었습니다. 어쨌든 방금 피 더블린을 다시 열었고 AngularJS 소스를 최신 1.2.4로 변경했으며 동일한 빈 브래킷 문제가 다시 발생했습니다. 따라서 앱이 1.1.5인지 확인하십시오. 작동하는 경우 버전 문제입니다. 나는 주사가 필요한지 또는 비추천이 문제인지보기 위해 보았습니다. – jnthnjns

답변

0

최신 버전의 각도에서는 코드가 작동하지 않습니다. 이전 버전에서는 격리 범위가 실제로 격리되지 않고 다른 지시문으로 유출되는 버그가있었습니다.

각도 1.2.x에서 격리 범위는 정말로 격리되어 있습니다. 이것은 당신이 지시하지 않는 한 템플릿에 무엇이든 하나를 사용하고 범위에 수동으로 넣어 또는이 (예를 들어 scope: { myVar: '='})

예를 들어, 귀하의 경우 귀하의 템플릿을 surveyQuestions에 액세스 할 수 없습니다 분리 범위 정의에 포함 할 수 없음을 의미 그것 때문에 개인 범위에 정의되지 않았습니다. (ng-init은 surveyCheckbox 지시문 내 격리 범위에 액세스 할 수 없습니다.)

지시문 템플릿에 surveyQuestions을 사용할 수있게하려면 다음을 전달해야합니다. 격리 범위 :

<survey-checkbox questions="surveyQuestions" ng-model="bedsideQ2" ng-init="surveyQuestions = [ 
       { 'value':'value1', 'name': 'The unit' }, 
       { 'value': 'value2', 'name': 'Patient Threw Up'}, 
       { 'value':'value3', 'name': 'Unsafe for children' }, 
       { 'value':'value4', 'name': 'Actively dying, reached life goal'}]"> 
</survey-checkbox> 

그런 다음 격리 범위에 추가하십시오.

scope: { 
    ngModel: '@', 
    surveyQuestions: '=questions' 
} 
관련 문제