ng-model과 ng-bind의 차이점은 무엇입니까


554

나는 현재 AngularJS와 배우고 사이의 차이를 이해하는 데 어려움을 겪고 ng-bindng-model.

누구나 어떻게 다른지, 언제 다른 것을 사용해야하는지 말해 줄 수 있습니까?

답변:


831

ng-bind 에는 단방향 데이터 바인딩이 있습니다 ($ scope-> view). 변수 이름 인 html에 삽입 된 {{ val }} 범위 값을 표시 하는 바로 가기 가 있습니다.$scope.valval

ng-model 은 양식 요소 안에 배치되며 양방향 데이터 바인딩 ($ scope-> view and view-> $ scope)을 갖습니다 (예 :) <input ng-model="val"/>.


80
고마워요 표시 할 값에 사용자 입력이 필요하지 않은 경우에만 ng-bind가 필요하다고 말하는 것이 합리적일까요? 그리고 ng-modal은 값 (<input>)에 사용됩니다. 각도 문서는 이것을 제안하는 것으로 보이지만 더 잘 이해하고 있습니다.
더빙

24
@Marc 실제로 ng-bind는 값이 아닌 요소의 텍스트 내용을 바인딩합니다. 이 때문에 <input> 요소에서는 사용할 수 없습니다.
trogdor 2009 년

21
@Marc의 경우에는 다음을 사용하십시오 : <input type = "text"value = "{{prop}}"/>
John Kurlak

3
@JakubBarczyk {{:: va}}는 일회성 바인딩이 아니라 일회성 바인딩입니다.
Vlad Bezden

2
@Wachburn 단방향이지만 더 중요한 것은 일회성입니다. 모델이 값을 가져간 후 모델 변경 사항 시청을 중지합니다. 따라서 일반적인 단방향 바인딩이 필요한 경우 단방향 바인딩으로 사용할 수 없습니다.
Ruslan Stelmachenko

141

tosh 의 답변은 질문의 핵심에 잘 맞습니다. 다음은 몇 가지 추가 정보입니다.

필터 및 포맷터

ng-bindng-model모두가 사용자를 출력하기 전에 데이터 변환의 개념을 갖는다. 이를 ng-bind위해 filtersng-model사용하고 formatter 를 사용하십시오 .

필터 (ng- 바인드)

으로는 ng-bind, 당신은 사용할 수있는 필터를 사용자의 데이터를 변환 할 수 있습니다. 예를 들어

<div ng-bind="mystring | uppercase"></div>,

또는 더 간단하게 :

<div>{{mystring | uppercase}}</div>

참고 uppercase내장되어 각 필터 , 당신은 또한 수 있지만 자신의 필터를 구축 .

포맷터 (ng-model)

ng-model 포맷터를 만들려면을 수행하는 지시문을 작성 require: 'ngModel'하면 해당 지시문이 ngModel 's에 액세스 할 수 있습니다 controller. 예를 들면 다음과 같습니다.

app.directive('myModelFormatter', function() {
  return {
    require: 'ngModel',
    link: function(scope, element, attrs, controller) {
     controller.$formatters.push(function(value) {
        return value.toUpperCase();
      });
    }
  }
}

그런 다음 부분적으로 :

<input ngModel="mystring" my-model-formatter />

이것은 본질적으로 위 의 예 에서 필터 가 수행 하는 ng-model것과 같습니다 .uppercase ng-bind


파서

사용자가 값을 변경할 수있게하려면 어떻게해야 mystring합니까? ng-bind단지에서, 한 방향으로 구속력을 가지고 모델 > - 보기 . 그러나, ng-model에서 결합 할 수있는 보기 > - 모델 은 사용자가 모델의 데이터를 변경할 수 있도록하고, 사용 수있는 수단 파서 당신이 간소화 된 방식으로 사용자의 데이터를 포맷 할 수 있습니다. 그 모습은 다음과 같습니다.

app.directive('myModelFormatter', function() {
  return {
    require: 'ngModel',
    link: function(scope, element, attrs, controller) {
     controller.$parsers.push(function(value) {
        return value.toLowerCase();
      });
    }
  }
}

ng-model포맷터 / 파서 예제 의 라이브 플 런처와 함께 플레이


그 밖의 무엇?

ng-model내장 된 검증 기능도 있습니다. 간단하게 수정 $parsers또는 $formatters전화 기능을 ngModelcontroller.$setValidity(validationErrorKey, isValid)기능 .

Angular 1.3에는 새로운 $ validators 배열 이있어$parsers또는대신에 유효성 검사에 사용할 수 있습니다$formatters.

Angular 1.3에는 ngModel에 대한 getter / setter 지원도 있습니다.


7
+ 1. 추가 정보 감사합니다. 빠른 답변 (Tosh 's)을 갖는 것이 항상 좋거나 좋습니다. 그런 다음 추론 / 사용 사례에서 더 많은 것을 배우고 이해하기위한 자세한 WHY & HOW 답변.
redfox05

30

ngModel

ngModel 지시문은 입력, 선택, 텍스트 영역 (또는 사용자 지정 양식 컨트롤)을 범위의 속성에 바인딩합니다.

이 지시문은 우선 순위 레벨 1에서 실행됩니다.

플런저

자바 스크립트

angular.module('inputExample', [])
   .controller('ExampleController', ['$scope', function($scope) {
     $scope.val = '1';
}]);

CSS

.my-input {
    -webkit-transition:all linear 0.5s;
    transition:all linear 0.5s;
    background: transparent;
}
.my-input.ng-invalid {
    color:white;
    background: red;
}

HTML

<p id="inputDescription">
   Update input to see transitions when valid/invalid.
   Integer is a valid value.
</p>
<form name="testForm" ng-controller="ExampleController">
    <input ng-model="val" ng-pattern="/^\d+$/" name="anim" class="my-input"
         aria-describedby="inputDescription" />
</form>

ngModel은 다음을 담당합니다.

  • 입력, 텍스트 영역 또는 선택과 같은 다른 지시문이 필요한 뷰를 모델에 바인딩합니다.
  • 유효성 검사 동작 제공 (예 : 필수, 번호, 전자 메일, URL)
  • 컨트롤 상태 유지 (유효 / 무효, 더티 / 프리스틴, 터치 / 터치, 검증 오류)
  • 애니메이션을 포함한 요소 (ng-valid, ng-invalid, ng-dirty, ng-pristine, ng-touched, ng-untouched)에 관련 CSS 클래스 설정
  • 부모 폼으로 컨트롤을 등록합니다.

ngBind

ngBind 속성은 Angular에 지정된 HTML 요소의 텍스트 내용을 주어진 표현식의 값으로 바꾸고 해당 표현식의 값이 변경 될 때 텍스트 내용을 업데이트하도록 지시합니다.

이 지시문은 우선 순위 레벨 0에서 실행됩니다.

플런저

자바 스크립트

angular.module('bindExample', [])
    .controller('ExampleController', ['$scope', function($scope) {
    $scope.name = 'Whirled';
}]);

HTML

<div ng-controller="ExampleController">
  <label>Enter name: <input type="text" ng-model="name"></label><br>
  Hello <span ng-bind="name"></span>!
</div>

ngBind는 다음을 담당합니다.

  • 지정된 HTML 요소의 텍스트 내용을 지정된 표현식의 값으로 바꿉니다.

이 철저한 답변에 감사하지만 이전에 선택한 답변은 그 차이 를 이해 하기에 충분한 정보를 제공하기 때문에 그대로 유지됩니다 .
더빙

8

사용 사이에 주저하는 경우 ng-bind또는 ng-model, 이러한 질문에 대답하려고 :


당신이 할 경우에만 필요 디스플레이 데이터?

  • 예 : ng-bind (단방향 바인딩)

  • 아니오 : ng-model (양방향 바인딩)

가치가 아닌 텍스트 내용묶어야 합니까?

  • 예: ng-bind

  • 아니오 : ng-model (값이 필요한 곳에 ng-bind를 사용하면 안됩니다)

태그가 HTML <input>입니까?

  • 예 : ng-model ( <input>태그 와 함께 ng-bind를 사용할 수 없습니다 )

  • 아니: ng-bind


6

ng- 모델

AngularJS의 ng-model 지시문은 응용 프로그램에 사용되는 변수를 입력 구성 요소와 바인딩하는 가장 큰 장점 중 하나입니다. 이것은 양방향 데이터 바인딩으로 작동합니다. 양방향 바인딩에 대해 더 잘 이해하려면 입력 컴포넌트가 있고 해당 필드로 업데이트 된 값이 애플리케이션의 다른 부분에 반영되어야합니다. 더 나은 솔루션은 변수를 해당 필드에 바인딩하고 응용 프로그램을 통해 업데이트 된 값을 표시하려는 경우 해당 변수를 출력하는 것입니다.

NG 바인드

ng-bind는 ng-model과 매우 다른 방식으로 작동합니다. ng-bind는 html 구성 요소 내부의 값을 내부 HTML로 표시하는 데 사용되는 한 가지 방법으로 데이터 바인딩입니다. 이 지시문은 변수와의 바인딩에는 사용할 수 없지만 HTML 요소 내용에만 바인딩 할 수 있습니다. 실제로 이것은 컴포넌트를 HTML 요소에 바인딩하기 위해 ng-model과 함께 사용될 수 있습니다. 이 지시문은 내부 HTML 내용으로 div, span 등의 블록을 업데이트하는 데 매우 유용합니다.

이 예 는 이해하는 데 도움이됩니다.


5

angular.module('testApp',[]).controller('testCTRL',function($scope)
                               
{
  
$scope.testingModel = "This is ModelData.If you change textbox data it will reflected here..because model is two way binding reflected in both.";
$scope.testingBind = "This is BindData.You can't change this beacause it is binded with html..In above textBox i tried to use bind, but it is not working because it is one way binding.";            
});
div input{
width:600px;  
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<head>Diff b/w model and bind</head>
<body data-ng-app="testApp">
    <div data-ng-controller="testCTRL">
        Model-Data : <input type="text" data-ng-model="testingModel">
        <p>{{testingModel}}</p>
          <input type="text" data-ng-bind="testingBind">
          <p ng-bind="testingBind"></p>
    </div>
</body>


2

ngModel은 일반적으로 컨트롤러와 html 페이지에서 변수를 변경할 수있는 변수를 바인딩하기 위해 입력 태그에 사용 하지만 ngBind 는 html 페이지에 변수를 표시하기 위해 사용하며 컨트롤러와 html 에서 변수를 표시 할 수 있습니다.


1

ng-bind를 사용 <p>하여 표시 할 수 있고 ng-bind {{model}},에 대한 단축키를 사용할 수 있으며 , ng-bind를 html 입력 컨트롤 ng-bind {{model}}과 함께 사용할 수 없지만 html 입력 컨트롤과 함께 단축키를 사용할 수 있습니다 .

<input type="text" ng-model="name" placeholder="Enter Something"/>
<input type="text" value="{{name}}" placeholder="Enter Something"/>
  Hello {{name}}
<p ng-bind="name"</p>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.