Heim Web-Frontend js-Tutorial AngularJS benutzerdefinierte Attribute von ng-model tag_AngularJS

AngularJS benutzerdefinierte Attribute von ng-model tag_AngularJS

May 16, 2016 pm 03:19 PM
angularjs

Manchmal müssen wir ng-model zu Nicht-Eingabetypelementen hinzufügen, um eine bidirektionale Datenbindung zu erreichen und dadurch redundanten Code zu reduzieren. Dann können Sie diese Methode ausprobieren

Zum Beispiel: Ich verwende das contenteditable-Attribut auf meiner Seite, um div-Elemente zu implementieren, die von Benutzern direkt kompiliert werden können

html:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<style>

    .text{

      margin:0 auto;

      width:100px;

      height:50px;

      border:1px solid red;

    }

  </style>

</head>

<body>

<div ng-controller="selectController">

  <div ng-repeat="pop in citylist">

    <div class="text" contenteditable="true" ng-model="pop.pop"></div>

  </div>

  <button ng-click="cs()">输出新数据</button>

</div>

</body>

Nach dem Login kopieren

Wenn Sie ng-model jedoch direkt binden, erhalten Sie die Daten definitiv nicht. In diesem Fall müssen Sie benutzerdefinierte Attribute hinzufügen, wie unten gezeigt.

js:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

<script>

  var app = angular.module('app', []);

  app.controller('selectController', function ($scope) {

    $scope.citylist=[{id:1,pop:"北京"},{id:1,pop:"上海"},{id:1,pop:"广州"}];

    $scope.p={};

    $scope.cs=function(){

      console.log($scope.citylist);

    }

  }).directive('contenteditable', function() {//自定义ngModel的属性可以用在div等其他元素中

    return {

      restrict: 'A', // 作为属性使用

      require: '?ngModel', // 此指令所代替的函数

      link: function(scope, element, attrs, ngModel) {

        if (!ngModel) {

          return;

        } // do nothing if no ng-model

        // Specify how UI should be updated

        ngModel.$render = function() {

          element.html(ngModel.$viewValue || '');

        };

        // Listen for change events to enable binding

        element.on('blur keyup change', function() {

          scope.$apply(readViewText);

        });

        // No need to initialize, AngularJS will initialize the text based on ng-model attribute

        // Write data to the model

        function readViewText() {

          var html = element.html();

          // When we clear the content editable the browser leaves a <br> behind

          // If strip-br attribute is provided then we strip this out

          if (attrs.stripBr && html === '<br>') {

            html = '';

          }

          ngModel.$setViewValue(html);

        }

      }

    };

  })

</script>

Nach dem Login kopieren

Die Parameterkategorien sind wie folgt:

Erklärung einiger Parameter

einschränken:

(String) optionaler Parameter, der angibt, wie die Anweisung im DOM deklariert wird;

Die Werte sind: E (Element), A (Attribut), C (Klasse), M (Kommentar), wobei der Standardwert A ist;

E (Element): <directiveName></directiveName>

A (Attribut):<div DirectiveName='expression'></div>

C (Klasse): <div class='directiveName'></div>
M (Kommentar): <--directive:directiveName expression-->

2.erforderlich

Die Zeichenfolge stellt den Namen eines anderen Befehls dar, der als vierter Parameter der Link-Funktion verwendet wird

Wir können ein Beispiel geben, um die spezifische Verwendung zu veranschaulichen

Angenommen, wir möchten jetzt zwei Anweisungen schreiben. Es gibt viele überlappende Methoden in der Verknüpfungsfunktion der beiden Anweisungen (die Verknüpfungsfunktion wird später erläutert),

Zu diesem Zeitpunkt können wir diese wiederholten Methoden in den Controller der dritten Anweisung schreiben (wie oben erwähnt, wird der Controller häufig verwendet, um Wiederverwendungsverhalten zwischen Anweisungen bereitzustellen)

Dann benötigen Sie in diesen beiden Anweisungen die Anweisung mit dem Controller-Feld (die dritte Anweisung),

Schließlich können diese überlappenden Methoden über den vierten Parameter der Link-Funktion referenziert werden.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

&lt;!doctype html&gt;

&lt;html ng-app="myApp"&gt;

&lt;head&gt;

 &lt;script src="http://cdn.staticfile.org/angular.js/1.2.10/angular.min.js"&gt;&lt;/script&gt;

&lt;/head&gt;

&lt;body&gt;

 &lt;outer-directive&gt;

   &lt;inner-directive&gt;&lt;/inner-directive&gt;

   &lt;inner-directive2&gt;&lt;/inner-directive2&gt;

 &lt;/outer-directive&gt;

 &lt;script&gt;

  var app = angular.module('myApp', []);

  app.directive('outerDirective', function() {

     return {

        scope: {},

        restrict: 'AE',

        controller: function($scope) {  

         this.say = function(someDirective) {

           console.log('Got:' + someDirective.message);

         };

        }

      };

  });

  app.directive('innerDirective', function() {

     return {

        scope: {},

        restrict: 'AE',

        require: '^outerDirective',

        link: function(scope, elem, attrs, controllerInstance) {

            scope.message = "Hi,leifeng";

            controllerInstance.say(scope);

        }

     };

  });

  app.directive('innerDirective2', function() {

     return {

        scope: {},

        restrict: 'AE',

        require: '^outerDirective',

        link: function(scope, elem, attrs, controllerInstance) {

            scope.message = "Hi,shushu";

            controllerInstance.say(scope);

        }

     };

  });

 &lt;/script&gt;

&lt;/body&gt;

&lt;/html&gt;

Nach dem Login kopieren
Die Anweisungen innerDirective und innerDirective2 im obigen Beispiel verwenden die im Controller der Anweisung OuterDirective definierte Methode wieder

erklärt außerdem weiter, dass der Controller in der Anweisung zur Kommunikation zwischen verschiedenen Anweisungen verwendet wird.

Darüber hinaus können wir dem erforderlichen Parameterwert eines der folgenden Präfixe hinzufügen, was das Verhalten des Suchcontrollers ändert:

(1) Ohne Präfix sucht die Anweisung im von ihr bereitgestellten Controller. Wenn kein Controller gefunden wird, wird ein Fehler ausgegeben

(2)? Wenn der erforderliche Controller in der aktuellen Anweisung nicht gefunden wird, wird null an den vierten Parameter der Link-Verbindungsfunktion

übergeben

(3)^Wenn der erforderliche Controller in der aktuellen Direktive nicht gefunden wird, wird nach dem Controller des übergeordneten Elements gesucht

(4)?^ Kombination

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Die neuesten 5 AngularJS-Tutorials im Jahr 2022, vom Einstieg bis zur Beherrschung Die neuesten 5 AngularJS-Tutorials im Jahr 2022, vom Einstieg bis zur Beherrschung Jun 15, 2017 pm 05:50 PM

Die neuesten 5 AngularJS-Tutorials im Jahr 2022, vom Einstieg bis zur Beherrschung

Verwenden Sie PHP und AngularJS, um eine reaktionsfähige Website zu erstellen und ein hochwertiges Benutzererlebnis zu bieten Verwenden Sie PHP und AngularJS, um eine reaktionsfähige Website zu erstellen und ein hochwertiges Benutzererlebnis zu bieten Jun 27, 2023 pm 07:37 PM

Verwenden Sie PHP und AngularJS, um eine reaktionsfähige Website zu erstellen und ein hochwertiges Benutzererlebnis zu bieten

Erstellen Sie Webanwendungen mit PHP und AngularJS Erstellen Sie Webanwendungen mit PHP und AngularJS May 27, 2023 pm 08:10 PM

Erstellen Sie Webanwendungen mit PHP und AngularJS

Verwenden Sie PHP und AngularJS, um eine Online-Dateiverwaltungsplattform zu entwickeln, die die Dateiverwaltung erleichtert Verwenden Sie PHP und AngularJS, um eine Online-Dateiverwaltungsplattform zu entwickeln, die die Dateiverwaltung erleichtert Jun 27, 2023 pm 01:34 PM

Verwenden Sie PHP und AngularJS, um eine Online-Dateiverwaltungsplattform zu entwickeln, die die Dateiverwaltung erleichtert

Einführung in die Grundlagen von AngularJS Einführung in die Grundlagen von AngularJS Apr 21, 2018 am 10:37 AM

Einführung in die Grundlagen von AngularJS

Wie verwende ich AngularJS in der PHP-Programmierung? Wie verwende ich AngularJS in der PHP-Programmierung? Jun 12, 2023 am 09:40 AM

Wie verwende ich AngularJS in der PHP-Programmierung?

Erstellen Sie eine einseitige Webanwendung mit Flask und AngularJS Erstellen Sie eine einseitige Webanwendung mit Flask und AngularJS Jun 17, 2023 am 08:49 AM

Erstellen Sie eine einseitige Webanwendung mit Flask und AngularJS

So verwenden Sie PHP und AngularJS für die Frontend-Entwicklung So verwenden Sie PHP und AngularJS für die Frontend-Entwicklung May 11, 2023 pm 05:18 PM

So verwenden Sie PHP und AngularJS für die Frontend-Entwicklung

See all articles