나는 내 자신의 지시어를 쓰고있는 드롭 다운을 구현 중이다. 나는 어떤 종류의 입력 요소를 사용하지 않으므로 ngModel을 사용하지 않습니다. 맞춤 속성과 양방향 바인딩이 가능한가?NgModel을 사용하지 않고 사용자 지정 문에서 양방향 바인딩. 가능한?
var mainApp = angular.module('mainApp', []);
mainApp.directive('tableDropdown', ['$timeout',
function($timeout) {
return {
restrict: 'C',
scope: {
selectedFilter: '=?'
},
link: function(scope, elem, attrs) {
$timeout(function() {
angular.element(elem).find('li:first-child').addClass(angular.element(elem).find('li').hasClass('selected') ? '' : 'selected');
scope.selectedFilter.cycleStatus = null;
angular.element(elem).find('li').click(function(e) {
if (angular.element(this).closest('ul').hasClass('active')) {
angular.element(this).closest('ul').removeClass('active');
scope.selectedFilter.selected = angular.element(this).attr('value');
} else {
angular.element(this).closest('ul').addClass('active');
scope.selectedFilter.selected = null;
}
angular.element(this).addClass('selected').siblings().removeClass('selected');
})
}, 0);
}
}
}
])
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<th ng-app="mainApp" ng-init="datefilter.selected=null">
--{{datefilter.selected}}
<ul class="tableDropdown" selected-filter="datefilter.selected">
<li value="null" class="default"><span>Cycle Status</span>
</li>
<li value="completed"><span>Completed</span>
</li>
<li value="cancelled"><span>Cancelled</span>
</li>
</ul>
</th>
나는 그것이 드롭처럼 보이게 만드는 CSS를 추가하지 않은 있습니다. 나는 그것이 필요하다고 생각하지 않았다.
선택한 값을 datefilter.selected
에 가져 와서 다른 것을 사용하고 싶습니다. 그게 가능한가? 해결 방법이 없다면 해결 방법이 있습니까?
예, 양방향 바인딩이 가능합니다. 현재 코드가 이와 유사한 작업을 수행하지 않기 때문에 datefilter.selected가 변경되면 모든 값 중 하나를 클릭하여 여기에서 무엇을 달성하려고합니까? – gaurav5430
예 나는 그것이 가치를 바꾸기를 원한다. 'scope.selectedFilter.cycleStatus'에서'scope.selectedFilter.selected'로 코드를 업데이트했습니다. – Roy
부수적으로, 지시어를 클래스로 제한하는 것은 일반적으로 싫은 일입니다. – gyc