Heim > Web-Frontend > js-Tutorial > Lernen des AngularJS-Bereichs

Lernen des AngularJS-Bereichs

高洛峰
Freigeben: 2016-11-21 16:57:47
Original
1216 Leute haben es durchsucht

Einführung in die prototypische Vererbung von JavaScript
In AngularJs gibt es eine bidirektionale Datenbindung, aber nicht jede Änderung führt zu einem entsprechenden Effekt. Manchmal kann dies passieren, wenn der Wert eines Basistyps übergeben wird. Diese Situation sollte auch in JavaScript selbst vorhanden sein. Ich werde zuerst eine Lücke graben und sie füllen, nachdem ich JavaScript gut gelernt habe.

Lernen des AngularJS-Bereichs

Das obige Bild ist das Prototyp-Vererbungsdiagramm von JavaScript. Die Unterklasse erbt die Attribute der übergeordneten Klasse Die übergeordnete Klasse greift auf die Prototypenkette zu, d. h., sie geht Schicht für Schicht nach oben, bis Sie die Attribute in der übergeordneten Klasse finden. Wenn Sie jedoch einer Eigenschaft eines Basistyps in einer Unterklasse direkt einen Wert zuweisen, wird nicht auf die Prototypkette zugegriffen, d. h., eine neue Eigenschaft mit demselben Namen wird in der Unterklasse und die Eigenschaften in der übergeordneten Klasse erstellt Auf die Klasse wird bei erneutem Zugriff nicht zugegriffen. Beim Zugriff auf ein von einer übergeordneten Klasse geerbtes Objekt wird auf die Prototypenkette zugegriffen.

childScope.aString === 'parent string' //true 访问了原型链
childScope.aNumber === 100 //true 访问了原型链

childScope.aNumber = 20 //不访问原型链,子类中将增加一个新属性,值为20
childScope.aString = 'child string' //不访问原型链,子类中将增加一个新的属性,值为 child string
childScope.anArray[2] = 100 //访问了原型链,父类中的anArray对象中第三个值被修改
Nach dem Login kopieren

Testen von ng-repeat, ng-switch und ng-include in AngularJS

    <!DOCTYPE html>
    <html ng-app="TestScopeModule">
    <head>
        <script src="**/angular.js"></script>
        <script src="scopeTest.js"></script>
        <script type="text/ng-template" id="login">
            <button ng-click="login()">login</button>
            <input type="checkbox" ng-model="loginData"/>
            <a href="#" ng-click="showScope($event)">switch&#39;s child scope,ng-include scope</a>
        </script>
        <script type="text/ng-template" id="logout">
            <button ng-click="logout()">logout</button>
            <input type="checkbox" ng-model="loginData"/>
            <a href="#" ng-click="showScope($event)">switch&#39;s child scope,ng-include scope</a>
        </script>
        <script type="text/ng-template" id="login1">
            <button ng-click="login1()">login</button>
            <input type="checkbox" ng-model="parent.loginData"/>
            <a href="#" ng-click="showScope($event)">switch&#39;s child scope,ng-include scope</a>
        </script>
        <script type="text/ng-template" id="logout1">
            <button ng-click="logout1()">logout</button>
            <input type="checkbox" ng-model="parent.loginData"/>
            <a href="#" ng-click="showScope($event)">switch&#39;s child scope,ng-include scope</a>
        </script>
    </head>
    <body>
        <div ng-controller="TestScopeCtrl">
            <div ng-repeat="item in list1">
                <label>Input {{$index+1}}</label>
                <input type="text" ng-model="item"/>
                <a href="#" ng-click="showScope($event)">parent scope&#39;s child scope</a>
            </div>
            <div>
                {{list1}}            
            </div>
            <hr/><hr/>
            <div ng-repeat="item in list2">
                <label>input{{$index+1}}</label>
                <input type="text" ng-model="item.text"/>
                <a href="#" ng-click="showScope($event)">parent scope&#39;s child scope</a>
            </div>
            <div>
                {{list2}}
            </div>
            <hr/><hr/>
            <div>
                <a href="#" ng-click="showScope($event)">parent scope</a>
            </div>
            <hr/><hr/>
            <div ng-switch on="loginData">
                <div ng-switch-when="false"><a href="#" ng-click="showScope($event)">switch&#39;s parent scope, parent scope&#39;s child scope</a><div ng-include="&#39;login&#39;"></div></div>
                <div ng-switch-when="true">
                <a href="#" ng-click="showScope($event)">switch&#39;s parent scope, parent scope&#39;s child scope, different with false case</a>
                <div ng-include="&#39;logout&#39;">
                </div>
                <a href="#" ng-click="showScope($event)">parent scope, not switch scope</a>
            </div>
            <hr/><hr/>
            <div ng-switch on="parent.loginData">
                <div ng-switch-when="false"><a href="#" ng-click="showScope($event)">switch&#39;s parent scope, parent scope&#39;s child scope</a><div ng-include="&#39;login1&#39;"></div></div>
                <div ng-switch-when="true">
                <a href="#" ng-click="showScope($event)">switch&#39;s parent scope, parent scope&#39;s child scope, different with false case</a>
                <div ng-include="&#39;logout1&#39;">
                </div>
            </div>
        </div>
    </body>
    </html>
Nach dem Login kopieren
    var TestScopeModule = angular.module(&#39;TestScopeModule&#39;, []);
    
    TestScopeModule.controller(&#39;TestScopeCtrl&#39;,[&#39;$scope&#39;,function ($scope) {
        $scope.list1 = [&#39;value1&#39;,&#39;value2&#39;, &#39;value3&#39;];
        $scope.list2 = [{text : &#39;value1&#39;},{text : &#39;value2&#39;},{text : &#39;value3&#39;}];
        $scope.showScope = function (e) {
            console.log(angular.element(e.srcElement).scope());
        };
        $scope.loginData = false;
        $scope.parent = {};
        $scope.parent.loginData = false;
        $scope.login = function () {
            $scope.loginData = true;
        };
        $scope.logout = function () {
            $scope.loginData = false;
        };
        $scope.login1 = function () {
            $scope.parent.loginData = true;
        };
        $scope.logout1 = function () {
            $scope.parent.loginData = false;
        };    
    }])
Nach dem Login kopieren

Das Obige ist ein kleiner Teil des Testcodes, der ng-repeat testet , ng bzw. -switch und ng-include, die Testergebnisse werden im Code markiert, dh der Bereich des untergeordneten Bereichs und des übergeordneten Bereichs.

Lernen des AngularJS-Bereichs

Lernen des AngularJS-Bereichs

Attribute und Werte im übergeordneten Bereich

Lernen des AngularJS-Bereichs

First ng The Der erste untergeordnete Bereich in -repeat verfügt über eigene Elementattribute und Werte im Bereich. Da es sich um einen Basisdatentyp handelt, wird beim Ändern des Werts nicht auf die Prototypkette zugegriffen, sodass er sich vom Wert im übergeordneten Bereich unterscheidet . ng-repeat generiert mehrere untergeordnete Bereiche und jeder untergeordnete Bereich verfügt über ein eigenes Elementattribut.

Lernen des AngularJS-Bereichs

Der erste untergeordnete Bereich im zweiten ng-repeat hat seine eigenen Elementattribute und Werte im Bereich. Das Element hier ist ein Objekt, also ändern Sie das Element in Das Objekt. Der Wert greift zuerst auf die Prototypenkette zu, daher ist er derselbe wie der Wert im übergeordneten Bereich

Lernen des AngularJS-Bereichs

Im von ngswitch generierten untergeordneten Bereich können Sie das sehen $parent ist der übergeordnete Bereich. Da nginclude hier in ngswitch verwendet wird, generiert nginclude auch einen eigenen Bereich, sodass es childHead und childTail gibt. ngswitch generiert Bereiche in zwei Fällen: wahr und falsch. Es handelt sich um zwei verschiedene Bereiche mit unterschiedlichen ID-Nummern.

Lernen des AngularJS-Bereichs

Dies ist der von nginclude in ngswitch generierte untergeordnete Bereich. Sie können sehen, dass die $id von $parent 12 ist, was der ID des von ngswitch generierten Bereichs entspricht.

Verwandte Etiketten:
Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage