在東方海外開始AngularJS的實習,從這一篇開始,記錄一些學習的心得。
學習的第一個模組AG的MVC結構(model view control),AG的核心就是模組化和複用。
MVC示意圖
檢視 檢視
service
控制器 控制器
資料模型
而這其中都是通過$scope來進行實現。
其實AG就是講前端一些業務邏輯分解成一個個module,我最近個人的理解就是其實一個網頁,一個JS就是一個module,然後一個模組(譬如一個form,一個按鈕)就各自寫一個controller,可以說是各執其職。
在學習中,我聽到視訊裡面說到controller有幾個很重要的點:
1.不要複用controll
2.不要再controller中操作DOM(其實我對DOM還不是很理解,可能會專門開一篇試試學學一下DOM)
3.不要資料格式化,有專門的AG表單控制元件
4.不做過濾,AG已經有封裝好的過濾器 $filter
5.不互相呼叫controller,強耦合
$scope是一個簡單的pojo類,他就是當前controller的一個類似儲存器一樣的東西,他可以呼叫這個節點內你定義的方法和屬性,這其中還有一個$rootscope節點,類似於樹狀圖的最頂端,如果在$scope內查詢不到想要的東西,他就會往上一個$scope查詢。在除錯中,還可以用這個語句來除錯$scope中的各個屬性的值:angular.element($0).scope()
路由,模組,依賴注入:
其實就類似於spring的依賴注入。(理解還不是很透徹,待補充。)
雙向資料繫結:
就是當你在前臺頁面,用ng-model繫結了資料,當被繫結的資料進行了修改時,會觸發一個髒檢查,是資料及時更新,是一
很酷炫的功能。在學習中,寫了一些Demo,能夠利用雙向資料繫結,除了可以及時顯示被修改的資料外,也能對css做出修改。
還學習AG中兩個比較常用的標籤ng-class和ng-show。
其實ng-class跟利用雙向資料繫結來修css是差不多的,只是可以利用AG封裝好的,就功能更為強大。
複製程式碼
<style>
.error{
background-color:
}
.warning{
background-color:
}
</style>
<body>
<div ng-controller="HeaderCtrl">
<p ng-class="{error:isError,warning:isWarning}">{{messageText}}</p>
<button class="btn btn-default" ng-click="showError()">Simulate Error</button>
<button class="btn btn-default" ng-click="showWarning()">Simulate Warning</button>
</div>
</body>
複製程式碼
angular.module('NgClassModule',[])
.controller('HeaderCtrl',['$scope',function ($scope) {
$scope.isError = false;
$scope.isWarning = false;
$scope.showError = function () {
$scope.messageText = 'This is an error',
$scope.isError=true;
$scope.isWarning = false;
};
$scope.showWarning = function () {
$scope.messageText = 'Just a warning, Please carry on.';
$scope.isWarning = true;
$scope.isError =false;
}
}])
複製程式碼
ng-show讓我個人理解來說相當於一個開關按鈕:對一個狀態進行判斷,然後進行顯示和隱藏。
複製程式碼
<style>
.error{
background-color:
}
.warning{
background-color:
}
</style>
<body>
<div ng-controller="DeathrayMenuCtrl">
<button ng-click="toggleMenu()">Toggle Menu</button>
<ul ng-show="menuState.show">
<li ng-click="stun()">stun</li>
<li ng-click="disintegrate()">Disintegrate</li>
<li ng-click="erase()">Erase from history</li>
</ul>
</div>
複製程式碼
angular.module('NgshowModule',[])
.controller('DeathrayMenuCtrl',['$scope',function ($scope) {
$scope.menuState = {
show:false
}
$scope.toggleMenu = function () {
$scope.menuState.show = !$scope.menuState.show;
}
}])
複製程式碼
大致如此,第一次總結才發現其實自己也有許多遺漏,具體程式碼已經上傳gitlab:https://gitlab.com/KIMFANG/angularjsdemo
跟狗子一起努力。
複製程式碼