2017年1月29日 星期日

ng-app、ng-init、ng-model、ng-bind、module、ng-controller (angularJS 一)

我用的是1.6.1版,之後都用這一版來試


※ng-app、ng-init、ng-model、ng-bind

ng-app:angularJS的啟始點
ng-init:初始值
ng-model:設定變數
ng-bind:挷定變數


<html>
    <script type="text/javascript" src="angular.js"></script>
    
    <body ng-app>
        <p>test1: <input ng-model="xxx1"></p>
        <p ng-bind="xxx1"></p>
    
        <p>test2: <input ng-model="xxx2"></p>
        <p>{{xxx2}}</p>
    
        <div ng-init="ooo1='bruce'">
            <p>test3:<span ng-bind="ooo1"></span></p>
        </div>
    
        <div data-ng-init="ooo2='bruce'">
            <p>test4:<span data-ng-bind="ooo2"></span></p>
        </div>
    
        <div ng-init="xox='00FF00'">
        <input style="color:{{xox}}" ng-model="xox" value='{{xox}}' />
    </body>
    
    <script>
        window.onload = () => {
            console.log(angular.version.full);
        }
    </script>
</html>

※ng-app會針對設定的範圍啟作用,如上是在body設置,所以整個body都會啟作用,假設設定在第一個p標籤,那只有第一個標籤會啟作用

※可以用「data-ng-」開頭取代「ng-」開頭,也可以一起使用

※ng-init、ng-model 就沒有範圍了,例如test2的{{xxx2}}改成{{xxx1}}是抓的到的

※angular.version是取版本用的

※xxx1和xxx2是有差別的,xxx2在網路較慢時,或按F5不放,有時會看到{{xxx2}}出現;xxx1不會



※ng-init 多個變數

<html>
    <script type="text/javascript" src="angular.js"></script>
    
    <body ng-app>
        <div ng-init="xxx='x';ooo='o'">
            <p>test1: <span ng-bind="xxx + ' ' + ooo"></span></p>
        </div>
    
        <div ng-init="init={xxx:'x',ooo:'o'}">
            <p>test2: <span ng-bind="init.ooo"></span></p>
        </div>
    
        <div ng-init="zzz=[0,1,2,3]">
            <p>test3: {{zzz[2]}}</p>
        </div>
    
        <div>
            <p>test4: <span ng-bind="zzz[2]"></span></p>
        </div>
    </body>
</html>

※ng-init可設定多個變數;但ng-model不行



※module、ng-controller

module:設定模組
ng-controller:設定控制器的範圍


<html>
    <script type="text/javascript" src="angular.js"></script>
    
    <body ng-app='xxx'>
        <div ng-controller='ooo'>
            p1: <input type='number' ng-model='p1'><br />
            p2: <input type='number' ng-model='p2'><br />
            <span>number:{{p1 + p2}}</span>
        </div>
    </body>
</html>
    
<script>
    var app = angular.module('xxx', []);
    app.controller('ooo', ($scope) => {
        $scope.p1= 1;
        $scope.p2= 2;
    });
</script>

※設定完p1和p2變數,可以重覆用很多次,如上但直接寫{{p1}}和ng-model="p1"都抓的到

※<script>那一段也可以寫在一支(或兩支)js,然後用<script src>加載進來

※var app可寫成一行

※angular.module 第一個參數為 module 名稱,第二個參數為依賴哪一些module,這個例子為沒有依賴

※ng-app取得設定的module

※設定好ng-controller的範圍後,就可以在裡面取得設定的變數,其中「$scope」是不能改的

※{{}}裡面是可以四則運算的,所以寫死的數字也是可以運行的

※angulars也有MVC:
M:scope,可在V和C使用
V:HTML
C:Javascript



※module 的依賴

<html>
    <script type="text/javascript" src="angular.min.js"></script>
    
    <body ng-app='xxx'>
        <div ng-controller='ooo'>
            p1: <input type='number' ng-model='p1'><br />
            p2: <input type='number' ng-model='p2'><br />
            <span>number:{{p1 + p2}}</span><br /><br />
    
            p3: <input type='number' ng-model='p3'><br />
            p4: <input type='number' ng-model='p4'><br />
            <span>number:{{p3 + p4}}</span><br /><br />
    
            p5: <input type='number' ng-model='p5'><br />
            p6: <input type='number' ng-model='p6'><br />
            <span>number:{{p5 + p6}}</span>
        </div>
    </body>
</html>
    
<script>
    var app = angular.module('xxx', ['xxx2', 'xxx3']);
    app.controller('ooo', ($scope, zzz, yyy) => {
        $scope.p1= 1;
        $scope.p2= 2;
        $scope.p3 = zzz.zzzMultiply2(20);
        $scope.p4 = zzz.zzzMultiply2(100);
        $scope.p5 = yyy.yyyAdd2(20);
        $scope.p6 = yyy.yyyAdd2(100);
    });
    
    angular.module('xxx2', []).service('zzz', function() {
        this.zzzMultiply2 = (x) => {
            return x + x;
        }
    });
    
    angular.module('xxx3', []).service('yyy', function() {
        this.yyyAdd2 = (x) => {
            return x + 2;
        }
    });
</script>

※sevice的功能是定義的字串可以在controller裡用,並且使用裡面的方法

※此例還可寫成xxx只依賴 xxx2 ,xxx2 又依賴 xxx3 ,此時的 xxx 還是能抓的到 yyy



※scope範圍


<html>
    <script type="text/javascript" src="angular.min.js"></script>
    
    <body ng-app='xxx'>
        <div ng-controller='ooo1'>
            <p>p1+p2:{{p1 + p2}}</p>
            <p>p3:{{p3}}</p>
            <p>number:{{p4 + p5}}</p>
            <p>p6:{{p6}}</p>
        </div>
        ------------------------------
        <div ng-controller='ooo2'>
            <p>p1+p2:{{p1 + p2}}</p>
            <p>p3:{{p3}}</p>
            <p>number:{{p4 + p5}}</p>
            <p>p6:{{p6}}</p>
        </div>
    </body>
</html>
    
<script>
    var app = angular.module('xxx', []);
    
    app.controller('ooo1', ($scope, $rootScope) => {
        $scope.p1= 1;
        $scope.p2= 2;
        $rootScope.p3=3;
    });
    
    app.controller('ooo2', ($scope, $rootScope) => {
        $scope.p4= 4;
        $scope.p5= 5;
        $rootScope.p6=6;
    });
</script>

※定了兩個controller,ooo1和ooo2,第一個div使用ooo1;第二個div使用ooo2,個別使用不同的範圍

※$scope 只能使用在 ng-controller 設定的範圍;而 $rootScope 沒有這種限制,哪裡都能使用

※如果$scope 和 $rootScope 都設一樣的變數,會以 $scope 為主

沒有留言:

張貼留言