※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 為主
沒有留言:
張貼留言