From 11e9572b952e49b01035e956c412d6095533031a Mon Sep 17 00:00:00 2001
From: Misko Hevery
Date: Fri, 29 Apr 2011 15:18:27 -0700
Subject: Move documentation under individual headings
---
docs/content/cookbook/mvc.ngdoc | 125 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 125 insertions(+)
create mode 100644 docs/content/cookbook/mvc.ngdoc
(limited to 'docs/content/cookbook/mvc.ngdoc')
diff --git a/docs/content/cookbook/mvc.ngdoc b/docs/content/cookbook/mvc.ngdoc
new file mode 100644
index 00000000..94688547
--- /dev/null
+++ b/docs/content/cookbook/mvc.ngdoc
@@ -0,0 +1,125 @@
+@workInProgress
+@ngdoc overview
+@name Cookbook: MVC
+@description
+
+MVC allows for a clean an testable separation between the behavior (controller) and the view
+(HTML template). A Controller is just a JavaScript class which is grafted onto the scope of the
+view. This makes it very easy for the controller and the view to share the model.
+
+The model is simply the controller's this. This makes it very easy to test the controller in
+isolation since one can simply instantiate the controller and test without a view, because there is
+no connection between the controller and the view.
+
+
+
+
+
+
Tic-Tac-Toe
+
+ Next Player: {{nextMove}}
+
Player {{winner}} has won!
+
+
+
{{cell}}
+
+
+
+
+
+
+ it('should play a game', function(){
+ piece(1, 1);
+ expect(binding('nextMove')).toEqual('O');
+ piece(3, 1);
+ expect(binding('nextMove')).toEqual('X');
+ piece(1, 2);
+ piece(3, 2);
+ piece(1, 3);
+ expect(element('.winner').text()).toEqual('Player X has won!');
+ });
+
+ function piece(row, col) {
+ element('.board tr:nth-child('+row+') td:nth-child('+col+')').click();
+ }
+
+
+
+
+# Things to notice
+
+* The controller is defined in JavaScript and has no reference to the rendering logic.
+* The controller is instantiated by and injected into the view.
+* The controller can be instantiated in isolation (without a view) and the code will still execute.
+ This makes it very testable.
+* The HTML view is a projection of the model. In the above example, the model is stored in the
+ board variable.
+* All of the controller's properties (such as board and nextMove) are available to the view.
+* Changing the model changes the view.
+* The view can call any controller function.
+* In this example, the `setUrl()` and `readUrl()` functions copy the game state to/from the URL's
+ hash so the browser's back button will undo game steps. See deep-linking. This example calls
+ {@link angular.Scope.$watch $watch()} to set up a listener that invokes `readUrl()` when needed.
--
cgit v1.2.3