diff options
| author | Vojta Jina | 2011-11-29 21:51:59 -0800 | 
|---|---|---|
| committer | Vojta Jina | 2012-01-23 11:05:36 -0800 | 
| commit | 992c790f0786fa45c1cc3710f29bf49c7c322ba7 (patch) | |
| tree | 581d06ea9ba275a14d5891d83b2df03f9930bd45 /example | |
| parent | f5343c9fd3c7cd0fefdb4d71d2b579dbae998d6a (diff) | |
| download | angular.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.js | 20 | ||||
| -rw-r--r-- | example/personalLog/test/personalLogSpec.js | 105 | 
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();      });    });  }); | 
