Skip to content

Instantly share code, notes, and snippets.

@justinyoo
Created November 13, 2015 11:52
Show Gist options
  • Save justinyoo/de8284ca511aa72ccbc1 to your computer and use it in GitHub Desktop.
Save justinyoo/de8284ca511aa72ccbc1 to your computer and use it in GitHub Desktop.
Event Sourcing & CQRS Pattern for SPA
module app.angular.Directives {
import UsernameDataModel = angular.Models.UsernameDataModel;
import UsernameChangeRequestModel = angular.Models.UsernameChangeRequestModel;
export interface IUserNameScope extends ng.IScope {
model: angular.Models.UsernameDataModel;
change: Function;
}
export class UserName implements ng.IDirective {
replace = true;
restrict = "EA";
scope = {};
templateUrl = "/App/components/userName/userName.html";
link($scope: IUserNameScope, element: JQuery, attributes: ng.IAttributes) {
var $select = element.find("input");
$select.on("change", () => {
var streamId = element.data("stream-id");
var value = $scope.model.value;
$scope.change($select.attr("id"), $select.attr("name"), value, streamId);
});
}
controller($scope: IUserNameScope, usernameFactory: angular.Factories.UsernameFactory, replayViewFactory: angular.Factories.ReplayViewFactory) {
$scope.model = new UsernameDataModel();
$scope.change = (id, name, value, streamId) => {
var request = new UsernameChangeRequestModel(id, name, value, streamId);
usernameFactory.postUsernameChange(request)
.success((response: angular.Models.UsernameChangeResponseModel) => {
replayViewFactory.setUsername(response.data.value);
console.log(response);
})
.error((response: angular.Models.UsernameChangeResponseModel) => {
console.log(response);
});
}
}
}
}
angular.module("app")
.directive("userName", () => new app.angular.Directives.UserName());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment