aboutsummaryrefslogtreecommitdiffstats
path: root/example
diff options
context:
space:
mode:
authorVojta Jina2011-11-29 21:51:59 -0800
committerVojta Jina2012-01-23 11:05:36 -0800
commit992c790f0786fa45c1cc3710f29bf49c7c322ba7 (patch)
tree581d06ea9ba275a14d5891d83b2df03f9930bd45 /example
parentf5343c9fd3c7cd0fefdb4d71d2b579dbae998d6a (diff)
downloadangular.js-992c790f0786fa45c1cc3710f29bf49c7c322ba7.tar.bz2
refactor(scope): separate controller from scope
Controller is standalone object, created using "new" operator, not messed up with scope anymore. Instead, related scope is injected as $scope. See design proposal: https://docs.google.com/document/pub?id=1SsgVj17ec6tnZEX3ugsvg0rVVR11wTso5Md-RdEmC0k Closes #321 Closes #425 Breaks controller methods are not exported to scope automatically Breaks Scope#$new() does not take controller as argument anymore
Diffstat (limited to 'example')
-rw-r--r--example/personalLog/personalLog.js20
-rw-r--r--example/personalLog/test/personalLogSpec.js105
2 files changed, 60 insertions, 65 deletions
diff --git a/example/personalLog/personalLog.js b/example/personalLog/personalLog.js
index 7be233cb..4d182227 100644
--- a/example/personalLog/personalLog.js
+++ b/example/personalLog/personalLog.js
@@ -26,26 +26,26 @@ var LOGS = 'logs';
/**
* The controller for the personal log app.
*/
-function LogCtrl($cookieStore) {
- var self = this,
- logs = self.logs = $cookieStore.get(LOGS) || []; //main model
+function LogCtrl($cookieStore, $scope) {
+
+ var logs = $scope.logs = $cookieStore.get(LOGS) || []; //main model
/**
* Adds newMsg to the logs array as a log, persists it and clears newMsg.
* @param {string} msg Message to add (message is passed as parameter to make testing easier).
*/
- this.addLog = function(msg) {
- var newMsg = msg || self.newMsg;
+ $scope.addLog = function(msg) {
+ var newMsg = msg || $scope.newMsg;
if (!newMsg) return;
var log = {
at: new Date().getTime(),
msg: newMsg
- }
+ };
logs.push(log);
$cookieStore.put(LOGS, logs);
- self.newMsg = '';
+ $scope.newMsg = '';
};
@@ -53,7 +53,7 @@ function LogCtrl($cookieStore) {
* Persistently removes a log from logs.
* @param {object} log The log to remove.
*/
- this.rmLog = function(log) {
+ $scope.rmLog = function(log) {
for ( var i = 0; i < logs.length; i++) {
if (log === logs[i]) {
logs.splice(i, 1);
@@ -68,14 +68,14 @@ function LogCtrl($cookieStore) {
/**
* Persistently removes all logs.
*/
- this.rmLogs = function() {
+ $scope.rmLogs = function() {
logs.splice(0, logs.length);
$cookieStore.remove(LOGS);
};
}
//inject
-LogCtrl.$inject = ['$cookieStore'];
+LogCtrl.$inject = ['$cookieStore', '$scope'];
//export
example.personalLog.LogCtrl = LogCtrl;
diff --git a/example/personalLog/test/personalLogSpec.js b/example/personalLog/test/personalLogSpec.js
index 9393e047..ab2d98c9 100644
--- a/example/personalLog/test/personalLogSpec.js
+++ b/example/personalLog/test/personalLogSpec.js
@@ -1,63 +1,58 @@
describe('example.personalLog.LogCtrl', function() {
- var logCtrl;
-
- function createNotesCtrl() {
- var injector = angular.injector(['ng', 'ngMock']);
- var scope = injector.get('$rootScope');
- scope.$cookies = injector.get('$cookies');
- return scope.$new(example.personalLog.LogCtrl);
- }
-
+ var logScope;
beforeEach(function() {
- logCtrl = createNotesCtrl();
+ var injector = angular.injector(['ng', 'ngMock']);
+ logScope = injector.get('$rootScope');
+ logScope.$cookies = injector.get('$cookies');
+ injector.instantiate(example.personalLog.LogCtrl, {$scope: logScope});
});
it('should initialize notes with an empty array', function() {
- expect(logCtrl.logs).toEqual([]);
+ expect(logScope.logs).toEqual([]);
});
describe('addLog', function() {
beforeEach(function() {
- expect(logCtrl.logs).toEqual([]);
+ expect(logScope.logs).toEqual([]);
});
it('should add newMsg to logs as a log entry', function() {
- logCtrl.newMsg = 'first log message';
- logCtrl.addLog();
+ logScope.newMsg = 'first log message';
+ logScope.addLog();
- expect(logCtrl.logs.length).toBe(1);
- expect(logCtrl.logs[0].msg).toBe('first log message');
+ expect(logScope.logs.length).toBe(1);
+ expect(logScope.logs[0].msg).toBe('first log message');
//one more msg, this time passed in as param
- logCtrl.addLog('second log message');
+ logScope.addLog('second log message');
- expect(logCtrl.logs.length).toBe(2);
- expect(logCtrl.logs[0].msg).toBe('first log message');
- expect(logCtrl.logs[1].msg).toBe('second log message');
+ expect(logScope.logs.length).toBe(2);
+ expect(logScope.logs[0].msg).toBe('first log message');
+ expect(logScope.logs[1].msg).toBe('second log message');
});
it('should clear newMsg when log entry is persisted', function() {
- logCtrl.addLog('first log message');
- expect(logCtrl.newMsg).toBe('');
+ logScope.addLog('first log message');
+ expect(logScope.newMsg).toBe('');
});
it('should store logs in the logs cookie', function() {
- expect(logCtrl.$cookies.logs).not.toBeDefined();
- logCtrl.addLog('first log message');
- expect(logCtrl.$cookies.logs).toBeTruthy();
+ expect(logScope.$cookies.logs).not.toBeDefined();
+ logScope.addLog('first log message');
+ expect(logScope.$cookies.logs).toBeTruthy();
});
it('should do nothing if newMsg is empty', function() {
- logCtrl.addLog('');
- expect(logCtrl.logs.length).toBe(0);
+ logScope.addLog('');
+ expect(logScope.logs.length).toBe(0);
});
});
@@ -65,35 +60,35 @@ describe('example.personalLog.LogCtrl', function() {
describe('rmLog', function() {
beforeEach(function() {
- logCtrl.addLog('message1');
- logCtrl.addLog('message2');
- logCtrl.addLog('message3');
- logCtrl.addLog('message4');
- expect(logCtrl.logs.length).toBe(4);
+ logScope.addLog('message1');
+ logScope.addLog('message2');
+ logScope.addLog('message3');
+ logScope.addLog('message4');
+ expect(logScope.logs.length).toBe(4);
});
it('should delete a message identified by index', function() {
- logCtrl.rmLog(logCtrl.logs[1]);
- expect(logCtrl.logs.length).toBe(3);
+ logScope.rmLog(logScope.logs[1]);
+ expect(logScope.logs.length).toBe(3);
- logCtrl.rmLog(logCtrl.logs[2]);
- expect(logCtrl.logs.length).toBe(2);
- expect(logCtrl.logs[0].msg).toBe('message1');
- expect(logCtrl.logs[1].msg).toBe('message3');
+ logScope.rmLog(logScope.logs[2]);
+ expect(logScope.logs.length).toBe(2);
+ expect(logScope.logs[0].msg).toBe('message1');
+ expect(logScope.logs[1].msg).toBe('message3');
});
it('should update cookies when a log is deleted', function() {
- expect(logCtrl.$cookies.logs).toMatch(/\[\{.*?\}(,\{.*?\}){3}\]/);
+ expect(logScope.$cookies.logs).toMatch(/\[\{.*?\}(,\{.*?\}){3}\]/);
- logCtrl.rmLog(logCtrl.logs[1]);
- expect(logCtrl.$cookies.logs).toMatch(/\[\{.*?\}(,\{.*?\}){2}\]/);
+ logScope.rmLog(logScope.logs[1]);
+ expect(logScope.$cookies.logs).toMatch(/\[\{.*?\}(,\{.*?\}){2}\]/);
- logCtrl.rmLog(logCtrl.logs[0]);
- logCtrl.rmLog(logCtrl.logs[0]);
- logCtrl.rmLog(logCtrl.logs[0]);
- expect(logCtrl.$cookies.logs).toMatch(/\[\]/);
+ logScope.rmLog(logScope.logs[0]);
+ logScope.rmLog(logScope.logs[0]);
+ logScope.rmLog(logScope.logs[0]);
+ expect(logScope.$cookies.logs).toMatch(/\[\]/);
});
});
@@ -101,24 +96,24 @@ describe('example.personalLog.LogCtrl', function() {
describe('rmLogs', function() {
beforeEach(function() {
- logCtrl.addLog('message1');
- logCtrl.addLog('message2');
- logCtrl.addLog('message3');
- logCtrl.addLog('message4');
- expect(logCtrl.logs.length).toBe(4);
+ logScope.addLog('message1');
+ logScope.addLog('message2');
+ logScope.addLog('message3');
+ logScope.addLog('message4');
+ expect(logScope.logs.length).toBe(4);
});
it('should remove all logs', function() {
- logCtrl.rmLogs();
- expect(logCtrl.logs).toEqual([]);
+ logScope.rmLogs();
+ expect(logScope.logs).toEqual([]);
});
it('should remove logs cookie', function() {
- expect(logCtrl.$cookies.logs).toBeTruthy();
- logCtrl.rmLogs();
- expect(logCtrl.$cookies.logs).not.toBeDefined();
+ expect(logScope.$cookies.logs).toBeTruthy();
+ logScope.rmLogs();
+ expect(logScope.$cookies.logs).not.toBeDefined();
});
});
});