AngularJS에서 CSS 스타일을 조건부로 적용하려면 어떻게합니까? 적용하거나 제거하는 가장 좋은 방법은

Q1. 기본 “삭제”버튼을 누르기 전에 사용자가 삭제 표시 한 각 “항목”의 모양을 변경하고 싶다고 가정합니다. 이 즉각적인 시각적 피드백을 통해 속담 “확실합니까?”대화 상자가 필요하지 않습니다. 사용자는 확인란을 선택하여 삭제해야 할 항목을 나타냅니다. 확인란을 선택하지 않으면 해당 항목이 다시 원래 모양으로 되돌아갑니다.

CSS 스타일을 적용하거나 제거하는 가장 좋은 방법은 무엇입니까?

Q2. 각 사용자가 내 사이트를 표시하는 방법을 개인화 할 수 있도록 허용하려고한다고 가정하십시오. 예를 들어, 고정 된 글꼴 크기 세트에서 선택하고 사용자 정의 가능한 전경색 및 배경색 등을 허용합니다

사용자가 선택 / 입력하는 CSS 스타일을 적용하는 가장 좋은 방법은 무엇입니까?



답변

Angular는 조건부 / 동적으로 CSS 스타일을 조작하기위한 여러 가지 기본 제공 지시문을 제공합니다.

  • ng-class- CSS 스타일 세트가 정적 / 미리 알려진 경우 사용
  • ng-style- 스타일 값이 동적으로 변경 될 수 있으므로 CSS 클래스를 정의 할 수없는 경우에 사용하십시오. 스타일 값의 프로그래밍 가능한 제어를 생각하십시오.
  • ng-show ng-hide- 표시하거나 숨길 필요가있는 경우 사용 (CSS 수정)
  • ng- if-버전 1.1.5의 새로운 기능, 단일 조건 만 확인해야하는 경우 더 자세한 ng- 스위치 대신 사용 (DOM 수정)
  • ng-switch- 상호 배타적 인 ng-show를 사용하는 대신 사용 (DOM 수정)
  • ng-disabled ng-readonly- 양식 요소 동작을 제한하는 데 사용
  • ng-animate- 버전 1.1.4의 새로운 기능, CSS3 전환 / 애니메이션을 추가하는 데 사용

일반적인 “각도”는 사용자 입력 / 조작을 받아 들일 (즉, ng-model 사용) UI 요소에 모델 / 범위 속성을 연결 한 다음 해당 모델 속성을 위에서 언급 한 내장 지시어 중 하나에 연결합니다.

사용자가 UI를 변경하면 Angular는 페이지의 관련 요소를 자동으로 업데이트합니다.


Q1은 ng-class에 좋은 사례로 들립니다. CSS 스타일은 클래스에서 캡처 할 수 있습니다.

ng-class 는 다음 중 하나로 평가되어야하는 “표현식”을 허용합니다.

  1. 공백으로 구분 된 클래스 이름의 문자열
  2. 클래스 명의 배열
  3. 부울 값에 대한 클래스 이름의 맵 / 객체

일부 배열 모델에서 ng-repeat를 사용하여 항목이 표시되고 항목의 확인란을 선택하면 pending-delete클래스 를 적용한다고 가정합니다 .

<div ng-repeat="item in items" ng-class="{'pending-delete': item.checked}">
   ... HTML to display the item ...
   <input type="checkbox" ng-model="item.checked">
</div>

위에서 우리는 ng-class expression type # 3-클래스 이름을 부울 값으로 매핑하는 객체를 사용했습니다.


Q2는 ng 스타일의 좋은 사례처럼 들립니다. CSS 스타일은 동적이므로 클래스를 정의 할 수 없습니다.

ng-style 은 다음과 같이 평가되어야하는 “표현식”을 허용합니다.

  1. CSS 스타일 이름의 CSS 값에 대한 맵 / 객체

고안된 예제의 경우 사용자가 배경색의 texbox에 색상 이름을 입력 할 수 있다고 가정합니다 (jQuery 색상 선택기가 훨씬 더 좋을 것임).

<div class="main-body" ng-style="{color: myColor}">
   ...
   <input type="text" ng-model="myColor" placeholder="enter a color name">


위의 두 가지 모두에 대한 바이올린 .

바이올린에는 ng-showng-hide 의 예제도 포함되어 있습니다 . 배경색이 분홍색으로 바뀌는 것 외에도 확인란을 선택하면 일부 텍스트가 표시됩니다. 텍스트 상자에 ‘빨간색’을 입력하면 div가 숨겨집니다.


답변

전체 테이블에 이미 하나의 클래스가 적용된 경우 테이블 요소 내부에 클래스를 적용 할 때 문제가 있음을 발견했습니다 (예 : 홀수 행에 적용된 색상 <myClass tbody tr:nth-child(even) td>). 당신이 가진 요소를 검사 할 때 것으로 보인다 개발자 도구 는이 element.style할당 된 스타일이 없습니다. 따라서을 사용하는 대신을 사용해 ng-class보았습니다 ng-style.이 경우 새로운 CSS 속성이 안에 나타납니다 element.style. 이 코드는 저에게 효과적입니다.

<tr ng-repeat="element in collection">

    [...amazing code...]

    <td ng-style="myvar === 0 && {'background-color': 'red'} ||
                  myvar === 1 && {'background-color': 'green'} ||
                  myvar === 2 && {'background-color': 'yellow'}">{{ myvar }}</td>

    [...more amazing code...]

</tr>

Myvar 은 내가 평가하는 것이며 각 경우 <td>myvar 값 에 따라 각각의 스타일을 적용하여 전체 테이블의 CSS 클래스에 의해 적용된 현재 스타일을 덮어 씁니다.

최신 정보

예를 들어, 페이지를 방문하거나 다른 경우에 클래스를 테이블에 적용하려면 다음 구조를 사용할 수 있습니다.

<li ng-class="{ active: isActive('/route_a') || isActive('/route_b')}">

기본적으로 ng-class 를 활성화해야하는 것은 적용 할 클래스와 true 또는 false 문입니다. True 는 클래스를 적용하고 false 는 적용 하지 않습니다. 그래서 여기에 우리는 페이지의 경로와 두 검사가 또는 우리에 그렇다면, 그들 사이 /route_a 또는 우리에 route_b활성 클래스가 적용됩니다.

이것은 오른쪽에 논리 함수를 사용하여 true 또는 false를 반환합니다.

첫 번째 예에서 ng-style 은 세 가지 문장으로 구성됩니다. 이들 모두가 거짓이면 스타일이 적용되지 않지만 논리에 따라 하나 이상이 적용되므로 논리 표현식은 어떤 변수 비교가 참인지 확인하고 비어 있지 않은 배열이 항상 참이므로 논리식은 전체 응답에 OR 을 사용한다는 점을 고려하면 배열을 반환으로 반환하고 하나만 true로 남겨두고 나머지 스타일이 적용됩니다.

그건 그렇고, isActive () 함수를 제공하는 것을 잊었습니다.

$rootScope.isActive = function(viewLocation) {
    return viewLocation === $location.path();
};

새로운 업데이트

여기에 정말 유용한 것이 있습니다. 변수 값에 따라 클래스를 적용해야하는 경우 (예 :의 내용에 따라 아이콘) div다음 코드를 사용할 수 있습니다 (에서 매우 유용함 ng-repeat).

<i class="fa" ng-class="{ 'fa-github'   : type === 0,
                          'fa-linkedin' : type === 1,
                          'fa-skype'    : type === 2,
                          'fa-google'   : type === 3 }"></i>

글꼴 멋진 아이콘


답변

ng-class를 사용할 수 없을 때 (예 : SVG 스타일링) 잘 작동합니다.

ng-attr-class="{{someBoolean && 'class-when-true' || 'class-when-false' }}"

(ng-attr-를 사용하려면 최신 불안정한 각도에 있어야한다고 생각합니다. 현재 1.1.4입니다.)

AngularJS + SVG 작업에 관한 기사를 게시했습니다. 이 문제와 다른 많은 문제에 대해 이야기합니다. http://www.codeproject.com/Articles/709340/Implementing-a-Flowchart-with-SVG-and-AngularJS


답변

span class="circle circle-{{selectcss(document.Extension)}}">

그리고 코드

$scope.selectcss = function (data) {
    if (data == '.pdf')
        return 'circle circle-pdf';
    else
        return 'circle circle-small';
};

CSS

.circle-pdf {
    width: 24px;
    height: 24px;
    font-size: 16px;
    font-weight: 700;
    padding-top: 3px;
    -webkit-border-radius: 12px;
    -moz-border-radius: 12px;
    border-radius: 12px;
    background-image: url(images/pdf_icon32.png);
}


답변

이 솔루션은 나를 위해 트릭을했다

<a ng-style="{true: {paddingLeft: '25px'}, false: {}}[deleteTriggered]">...</a>


답변

삼항식을 사용할 수 있습니다. 이를 수행하는 두 가지 방법이 있습니다.

<div ng-style="myVariable > 100 ? {'color': 'red'} : {'color': 'blue'}"></div>

또는…

<div ng-style="{'color': (myVariable > 100) ? 'red' : 'blue' }"></div>


답변

하나 또는 두 개의 속성으로 구성된 간단한 CSS 스타일이 필요한 경우 다른 옵션 :

전망:

<tr ng-repeat="element in collection">
    [...amazing code...]
    <td ng-style="{'background-color': getTrColor(element.myvar)}">
        {{ element.myvar }}
    </td>
    [...more amazing code...]
</tr>

제어 장치:

$scope.getTrColor = function (colorIndex) {
    switch(colorIndex){
        case 0: return 'red';
        case 1: return 'green';
        default: return 'yellow';
    }
};