Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
AngularJS Êý¾Ý½¨Ä£
 
À´Ô´£º²®ÀÖÔÚÏß ·¢²¼ÓÚ 2017-4-01
  1672  次浏览      27
 

ÎÒÃÇÖªµÀ£¬AngularJS²¢Ã»ÓÐ×Ô´øÁ¢µÈ¿ÉÓõÄÊý¾Ý½¨Ä£·½°¸¡£¶øÊÇÒÔÏ൱³éÏóµÄ·½Ê½£¬ÈÃÎÒÃÇÔÚcontrollerÖÐʹÓÃJSONÊý¾Ý×÷ΪģÐÍ¡£µ«ÊÇËæ×Åʱ¼äµÄÍÆÒÆºÍÏîÄ¿µÄ³É³¤£¬ÎÒÒâʶµ½ÕâÖÖ½¨Ä£µÄ·½Ê½²»ÔÙÄÜÂú×ãÎÒÃÇÏîÄ¿µÄÐèÇó¡£ÔÚÕâÆªÎÄÕÂÖÐÎÒ»á½éÉÜÔÚÎÒµÄAngularJSÓ¦ÓÃÖд¦ÀíÊý¾Ý½¨Ä£µÄ·½Ê½¡£

ΪController¶¨ÒåÄ£ÐÍ

ÈÃÎÒÃÇ´ÓÒ»¸ö¼òµ¥µÄÀý×Ó¿ªÊ¼¡£ÎÒÏëÒªÏÔʾһ¸öÊé±¾(book)µÄÒ³Ãæ¡£ÏÂÃæÊÇ¿ØÖÆÆ÷(Controller)£º

BookController

app.controller('BookController', ['$scope', function($scope) {
$scope.book = {
id: 1,
name: 'Harry Potter',
author: 'J. K. Rowling',
stores: [
{ id: 1, name: 'Barnes & Noble', quantity: 3},
{ id: 2, name: 'Waterstones', quantity: 2},
{ id: 3, name: 'Book Depository', quantity: 5}
]
};
}]);

Õâ¸ö¿ØÖÆÆ÷´´½¨ÁËÒ»¸öÊé±¾µÄÄ£ÐÍ£¬ÎÒÃÇ¿ÉÒÔÔÚºóÃæµÄÄ£°åÖÐ(templage)ÖÐʹÓÃËü¡£

template for displaying a book

<div ng-controller="BookController">
Id: <span ng-bind="book.id"></span>
<br/>
Name:<input type="text" ng-model="book.name" />
<br/>
Author: <input type="text" ng-model="book.author" />
</div>

¼ÙÈçÎÒÃÇÐèÒª´Óºǫ́µÄapi»ñÈ¡Êé±¾µÄÊý¾Ý£¬ÎÒÃÇÐèҪʹÓÃ$http:

BookController with $http

app.controller('BookController', ['$scope', '$http', function($scope, $http) {
var bookId = 1;

$http.get('ourserver/books/' + bookId).success(function(bookData) {
$scope.book = bookData;
});
}]);

×¢Òâµ½ÕâÀïµÄbookDataÈÔÈ»ÊÇÒ»¸öJSON¶ÔÏó¡£½ÓÏÂÀ´ÎÒÃÇÏëҪʹÓÃÕâЩÊý¾Ý×öһЩÊÂÇé¡£±ÈÈ磬¸üÐÂÊé±¾ÐÅÏ¢£¬É¾³ýÊé±¾£¬ÉõÖÁÆäËûµÄһЩ²»Éæ¼°µ½ºǫ́µÄ²Ù×÷£¬±ÈÈç¸ù¾ÝÇëÇóµÄͼƬ´óСÉú³ÉÒ»¸öÊ鱾ͼƬµÄurl£¬»òÕßÅжÏÊé±¾ÊÇ·ñÓÐЧ¡£ÕâЩ·½·¨¶¼¿ÉÒÔ±»¶¨ÒåÔÚ¿ØÖÆÆ÷ÖС£

BookController with several book actions

app.controller('BookController', ['$scope', '$http', function($scope, $http) {
var bookId = 1;

$http.get('ourserver/books/' + bookId).success(function(bookData) {
$scope.book = bookData;
});

$scope.deleteBook = function() {
$http.delete('ourserver/books/' + bookId);
};

$scope.updateBook = function() {
$http.put('ourserver/books/' + bookId, $scope.book);
};

$scope.getBookImageUrl = function(width, height) {
return 'our/image/service/' + bookId + '/width/height';
};

$scope.isAvailable = function() {
if (!$scope.book.stores || $scope.book.stores.length === 0) {
return false;
}
return $scope.book.stores.some(function(store) {
return store.quantity > 0;
});
};
}]);

È»ºóÔÚÎÒÃǵÄÄ£°åÖУº

template for displaying a complete book

<div ng-controller="BookController">
<div ng-style="{ backgroundImage: 'url(' + getBookImageUrl(100, 100) + ')' }"></div>
Id: <span ng-bind="book.id"></span>
<br/>
Name:<input type="text" ng-model="book.name" />
<br/>
Author: <input type="text" ng-model="book.author" />
<br/>
Is Available: <span ng-bind="isAvailable() ? 'Yes' : 'No' "></span>
<br/>
<button ng-click="deleteBook()">Delete</button>
<br/>
<button ng-click="updateBook()">Update</button>
</div>

ÔÚcontrollersÖ®¼ä¹²ÏíModel

Èç¹ûÊé±¾µÄ½á¹¹ºÍ·½·¨Ö»ºÍÒ»¸ö¿ØÖÆÆ÷Óйأ¬ÄÇÎÒÃÇÏÖÔڵŤ×÷ÒѾ­¿ÉÒÔÓ¦¸¶¡£µ«ÊÇËæ×ÅÓ¦ÓõÄÔö³¤£¬»áÓÐÆäËûµÄ¿ØÖÆÆ÷Ò²ÐèÒªºÍÊé±¾´ò½»µÀ¡£ÄÇЩ¿ØÖÆÆ÷ºÜ¶àʱºòÒ²ÐèÒª»ñÈ¡Êé±¾£¬¸üÐÂËü£¬É¾³ýËü£¬»òÕß»ñµÃËüµÄͼƬurlÒÔ¼°¿´ËüÊÇ·ñÓÐЧ¡£Òò´Ë£¬ÎÒÃÇÐèÒªÔÚ¿ØÖÆÆ÷Ö®¼ä¹²ÏíÕâЩÊé±¾µÄÐÐΪ¡£ÎÒÃÇÐèҪʹÓÃÒ»¸ö·µ»ØÊé±¾ÐÐΪµÄfactoryÀ´ÊµÏÖÕâ¸öÄ¿µÄ¡£ÔÚ¶¯ÊÖдһ¸öfactory֮ǰ£¬ÎÒÏëÔÚÕâÀïÏÈÌáһϣ¬ÎÒÃÇ´´½¨Ò»¸öfactoryÀ´·µ»Ø´øÓÐÕâЩbook¸¨Öú·½·¨µÄ¶ÔÏ󣬵«ÎÒ¸üÇãÏòÓÚʹÓÃprototypeÀ´¹¹ÔìÒ»¸öBookÀ࣬ÎÒ¾õµÃÕâÊǸüÕýÈ·µÄÑ¡Ôñ£º

Book model service

app.factory(&#039;Book&#039;, [&#039;$http&#039;, function($http) {
function Book(bookData) {
if (bookData) {
this.setData(bookData):
}
// Some other initializations related to book
};
Book.prototype = {
setData: function(bookData) {
angular.extend(this, bookData);
},
load: function(id) {
var scope = this;
$http.get(&#039;ourserver/books/&#039; + bookId).success(function(bookData) {
scope.setData(bookData);
});
},
delete: function() {
$http.delete(&#039;ourserver/books/&#039; + bookId);
},
update: function() {
$http.put(&#039;ourserver/books/&#039; + bookId, this);
},
getImageUrl: function(width, height) {
return &#039;our/image/service/&#039; + this.book.id + &#039;/width/height&#039;;
},
isAvailable: function() {
if (!this.book.stores || this.book.stores.length === 0) {
return false;
}
return this.book.stores.some(function(store) {
return store.quantity &gt; 0;
});
}
};
return Book;
}]);

ÕâÖÖ·½Ê½Ï£¬Êé±¾Ïà¹ØµÄËùÓÐÐÐΪ¶¼±»·â×°ÔÚBook·þÎñÄÚ¡£ÏÖÔÚ£¬ÎÒÃÇÔÚBookControllerÖÐÀ´Ê¹ÓÃÕâ¸öÁÁÑÛµÄBook·þÎñ¡£

BookController that uses Book model

app.controller(&#039;BookController&#039;, [&#039;$scope&#039;, &#039;Book&#039;, function($scope, Book) {
$scope.book = new Book();
$scope.book.load(1);
}]);

ÕýÈçÄã¿´µ½µÄ£¬¿ØÖÆÆ÷±äµÃ·Ç³£¼òµ¥¡£Ëü´´½¨Ò»¸öBookʵÀý£¬Ö¸Åɸøscope£¬²¢´Óºǫ́¼ÓÔØ¡£µ±Êé±¾±»¼ÓÔØ³É¹¦Ê±£¬ËüµÄÊôÐԻᱻ¸Ä±ä£¬Ä£°åÒ²Ëæ×ű»¸üС£¼ÇסÆäËûµÄ¿ØÖÆÆ÷ÏëҪʹÓÃÊé±¾¹¦ÄÜ£¬Ö»Òª¼òµ¥µØ×¢ÈëBook·þÎñ¼´¿É¡£´ËÍ⣬ÎÒÃÇ»¹Òª¸Ä±ätemplateʹÓÃbookµÄ·½·¨¡£

template that uses book instance

<div ng-controller="BookController">
<div ng-style="{ backgroundImage: 'url(' + book.getImageUrl(100, 100) + ')' }"></div>
Id: <span ng-bind="book.id"></span>
<br/>
Name:<input type="text" ng-model="book.name" />
<br/>
Author: <input type="text" ng-model="book.author" />
<br/>
Is Available: <span ng-bind="book.isAvailable() ? 'Yes' : 'No' "></span>
<br/>
<button ng-click="book.delete()">Delete</button>
<br/>
<button ng-click="book.update()">Update</button>
</div>

µ½ÕâÀÎÒÃÇÖªµÀÁËÈçºÎ½¨Ä£Ò»¸öÊý¾Ý£¬°ÑËûµÄ·½·¨·â×°µ½Ò»¸öÀàÖУ¬²¢ÇÒÔÚ¶à¸ö¿ØÖÆÆ÷Öй²ÏíËü£¬¶ø²»ÐèÒªÐ´ÖØ¸´´úÂë¡£

ÔÚ¶à¸ö¿ØÖÆÆ÷ÖÐʹÓÃÏàͬµÄÊ鱾ģÐÍ

ÎÒÃǶ¨ÒåÁËÒ»¸öÊ鱾ģÐÍ£¬²¢ÇÒÔÚ¶à¸ö¿ØÖÆÆ÷ÖÐʹÓÃÁËËü¡£ÔÚʹÓÃÁËÕâÖÖ½¨Ä£¼Ü¹¹Ö®ºóÄã»á×¢Òâµ½ÓÐÒ»¸öÑÏÖØµÄÎÊÌâ¡£µ½Ä¿Ç°ÎªÖ¹£¬ÎÒÃǼÙÉè¶à¸ö¿ØÖÆÆ÷¶ÔÊé±¾½øÐвÙ×÷£¬µ«Èç¹ûÓÐÁ½¸ö¿ØÖÆÆ÷ͬʱ´¦Àíͬһ±¾Êé»áÊÇʲôÇé¿öÄØ£¿

¼ÙÉèÎÒÃÇÒ³ÃæµÄÒ»¿éÇøÓòÎÒÃÇËùÓÐÊé±¾µÄÃû³Æ£¬ÁíÒ»¿éÇøÓò¿ÉÒÔ¸üÐÂijһ±¾Êé¡£¶ÔÓ¦ÕâÁ½¿éÇøÓò£¬ÎÒÃÇÓÐÁ½¸ö²»Í¬µÄ¿ØÖÆÆ÷¡£µÚÒ»¸ö¼ÓÔØÊé±¾ÁÐ±í£¬µÚ¶þ¸ö¼ÓÔØÌØ¶¨µÄÒ»±¾Êé¡£ÎÒÃǵÄÓû§ÔÚµÚ¶þ¿éÇøÓòÖÐÐÞ¸ÄÁËÊé±¾µÄÃû³Æ²¢ÇÒµã»÷¡°¸üС±°´Å¥¡£¸üвÙ×÷³É¹¦ºó£¬Êé±¾µÄÃû³Æ»á±»¸Ä±ä¡£µ«ÊÇÔÚÊé±¾ÁбíÖУ¬Õâ¸öÓû§Ê¼ÖÕ¿´µ½µÄÊÇÐÞ¸Ä֮ǰµÄÃû³Æ£¡ÕæÊµµÄÇé¿öÊÇÎÒÃǶÔͬһ±¾Êé´´½¨ÁËÁ½¸ö²»Í¬µÄÊ鱾ʵÀý¡ª¡ªÒ»¸öÔÚÊé±¾ÁбíÖÐʹÓ㬶øÁíÒ»¸öÔÚÐÞ¸ÄÊ鱾ʱʹÓᣵ±Óû§ÐÞ¸ÄÊé±¾Ãû³ÆµÄʱºò£¬Ëüʵ¼ÊÉÏÖ»ÐÞ¸ÄÁ˺óÒ»¸öʵÀýÖеÄÊôÐÔ¡£È»¶øÊé±¾ÁбíÖеÄÊ鱾ʵÀý²¢Î´µÃµ½¸Ä±ä¡£

½â¾öÕâ¸öÎÊÌâµÄ°ì·¨ÊÇÔÚËùÓеĿØÖÆÆ÷ÖÐʹÓÃÏàͬµÄÊ鱾ʵÀý¡£ÔÚÕâÖÖ·½Ê½Ï£¬Êé±¾ÁбíºÍÊé±¾Ð޸ĵÄÒ³ÃæºÍ¿ØÖÆÆ÷¶¼³ÖÓÐÏàͬµÄÊ鱾ʵÀý£¬Ò»µ©Õâ¸öʵÀý·¢Éú±ä»¯£¬¾Í»á±»Á¢¿Ì·´Ó³µ½ËùÓеÄÊÓͼÖС£ÄÇô°´ÕâÖÖ·½Ê½Ðж¯ÆðÀ´£¬ÎÒÃÇÐèÒª´´½¨Ò»¸öbooksManager·þÎñ£¨ÎÒÃÇûÓдóд¿ªÍ·µÄb×Öĸ£¬ÊÇÒòΪÕâÊÇÒ»¸ö¶ÔÏó¶ø²»ÊÇÒ»¸öÀࣩÀ´¹ÜÀíËùÓеÄÊ鱾ʵÀý³Ø£¬²¢ÇÒ¸»×ã·µ»ØÕâЩÊ鱾ʵÀý¡£Èç¹û±»ÇëÇóµÄÊ鱾ʵÀý²»ÔÚʵÀý³ØÖУ¬Õâ¸ö·þÎñ»á´´½¨Ëü¡£Èç¹ûÒѾ­ÔÚ³ØÖУ¬ÄÇô¾ÍÖ±½Ó·µ»ØËü¡£ÇëÀμǣ¬ËùÓеļÓÔØÊé±¾µÄ·½·¨×îÖÕ¶¼»á±»¶¨ÒåÔÚbooksManager·þÎñÖУ¬ÒòΪËüÊÇΨһµÄÌṩÊ鱾ʵÀýµÄ×é¼þ¡£

booksManager service

app.factory(&#039;booksManager&#039;, [&#039;$http&#039;, &#039;$q&#039;, &#039;
Book&#039;, function($http, $q, Book) {
var booksManager = {
_pool: {},
_retrieveInstance: function(bookId, bookData) {
var instance = this._pool[bookId];

if (instance) {
instance.setData(bookData);
} else {
instance = new Book(bookData);
this._pool[bookId] = instance;
}

return instance;
},
_search: function(bookId) {
return this._pool[bookId];
},
_load: function(bookId, deferred) {
var scope = this;

$http.get(&#039;ourserver/books/&#039; + bookId)
.success(function(bookData) {
var book = scope._retrieveInstance(bookData.id, bookData);
deferred.resolve(book);
})
.error(function() {
deferred.reject();
});
},
/* Public Methods */
/* Use this function in order to get a book instance by it&#039;s id */
getBook: function(bookId) {
var deferred = $q.defer();
var book = this._search(bookId);
if (book) {
deferred.resolve(book);
} else {
this._load(bookId, deferred);
}
return deferred.promise;
},
/* Use this function in order to get instances of all the books */
loadAllBooks: function() {
var deferred = $q.defer();
var scope = this;
$http.get(&#039;ourserver/books)
.success(function(booksArray) {
var books = [];
booksArray.forEach(function(bookData) {
var book = scope._retrieveInstance(bookData.id, bookData);
books.push(book);
});

deferred.resolve(books);
})
.error(function() {
deferred.reject();
});
return deferred.promise;
},
/* This function is useful when we got somehow the book data
and we wish to store it or update the pool and get a book instance in return */
setBook: function(bookData) {
var scope = this;
var book = this._search(bookData.id);
if (book) {
book.setData(bookData);
} else {
book = scope._retrieveInstance(bookData);
}
return book;
},

};
return booksManager;
}]);

ÏÂÃæÊÇÎÒÃǵÄEditableBookControllerºÍBooksListControllerÁ½¸ö¿ØÖÆÆ÷µÄ´úÂ룺

EditableBookController and BooksListController that uses booksManager

app.factory(&#039;Book&#039;, [&#039;$http&#039;, function($http) {
function Book(bookData) {
if (bookData) {
this.setData(bookData):
}
// Some other initializations related to book
};
Book.prototype = {
setData: function(bookData) {
angular.extend(this, bookData);
},
delete: function() {
$http.delete(&#039;ourserver/books/&#039; + bookId);
},
update: function() {
$http.put(&#039;ourserver/books/&#039; + bookId, this);
},
getImageUrl: function(width, height) {
return &#039;our/image/service/&#039; + this.book.id + &#039;/width/height&#039;;
},
isAvailable: function() {
if (!this.book.stores || this.book.stores.length === 0) {
return false;
}
return this.book.stores.some(function(store) {
return store.quantity &gt; 0;
});
}
};
return Book;
}]);

ÐèҪעÒâµÄÊÇ£¬Ä£¿é£¨template£©Öл¹ÊDZ£³ÖÔ­À´Ê¹ÓÃbookʵÀýµÄ·½Ê½¡£ÏÖÔÚÓ¦ÓÃÖÐÖ»³ÖÓÐÒ»¸öidΪ1µÄbookʵÀý£¬Ëü·¢ÉúµÄËùÓиı䶼»á±»·´Ó³µ½Ê¹ÓÃËüµÄ¸÷¸öÒ³ÃæÉÏ¡£

×ܽá

ÔÚÕâÆ¬ÎÄÕÂÖУ¬ÎÒ½¨ÒéÁËAngularJSÖн¨Ä£Êý¾ÝµÄÒ»Öּܹ¹¡£Ê×ÏÈ£¬ÎÒչʾÁËAngularJSĬÈϵÄÊý¾ÝÄ£ÐͰ󶨣¬È»ºó½²ÁËÈçºÎ·â×°Ä£Ð͵ķ½·¨ºÍ²Ù×÷´Ó¶ø¿ÉÒÔÔÚ²»Í¬µÄ¿ØÖÆÆäÖÐÖØÓÃËüÃÇ£¬×îºóÎÒ½âÊÍÁËÈçºÎ¹ÜÀíÄ£ÐÍʵÀý´Ó¶øÊ¹µÃËùÓеĸı䶼Äܱ»·´Ó³µ½Ó¦ÓÃÖи÷¸öÏà¹ØµÄÊÓͼÉÏ¡£

Ï£ÍûÕâÆªÎÄÕÂÄÜÔÚÈçºÎʵÏÖÊý¾Ý½¨Ä£ÉϸøÄãһЩÆôʾ¡£

   
1672 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕ Ïà¹ØÎĵµ Ïà¹Ø¿Î³Ì



Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

AndroidÊÖ»ú¿ª·¢£¨Ò»£©
Àí½âJavascript
·ÇµäÐÍajaxʵ¼ù
³¹µ×µÄAjax
javascript ʹÓÃCookies
ʹÓà jQuery ¼ò»¯ Ajax ¿ª·¢

Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ

ijº½¿Õ¹«Ë¾IT²¿ JavaScriptʵ¼ù
ijµçÊÓÈí¼þ HTML5ºÍJavaScript
Öк½ÐÅ JavaScript¸ß¼¶Ó¦Óÿª·¢
´óÇìÓÍÌï web½çÃæAjax¿ª·¢¼¼Êõ
ºÍÀûʱ ʹÓÃAJAX½øÐÐWEBÓ¦Óÿª·¢