diff --git a/public/index.html b/public/index.html index 354a235..2115439 100644 --- a/public/index.html +++ b/public/index.html @@ -59,9 +59,11 @@ - + + + diff --git a/public/scripts/app-angular.js b/public/scripts/app-angular.js index 98c64f0..f0d9aa3 100644 --- a/public/scripts/app-angular.js +++ b/public/scripts/app-angular.js @@ -1,42 +1,42 @@ var app = angular.module('bookmarkApp', ['ui.router']); -app.config(function ($stateProvider, $urlRouterProvider) { +app.config(function($stateProvider, $urlRouterProvider) { $urlRouterProvider.otherwise("/"); $stateProvider - .state('bookmarks', { - url:'/bookmarks', - templateUrl: '/views/bookmarks.html', - // controllerAs: 'bookmarksCtrl', - controller: 'bookmarksCtr' - }) - .state('addBookmark', { - url:'/addBookmark', - templateUrl: '/views/addBookmark.html', - }) - .state('tags', { - url:'/tags', - templateUrl: '/views/tags.html', - }) - .state('advice', { - url:'/advice', - templateUrl: '/views/advice.html', - }) - .state('settings', { - url:'/settings', - templateUrl: '/views/settings.html', - }) - .state('register', { - url:'/register', + .state('bookmarks', { + url: '/bookmarks', + templateUrl: '/views/bookmarks.html', + controller: 'bookmarksCtr' + }) + .state('addBookmark', { + url: '/addBookmark', + templateUrl: '/views/addBookmark.html', + }) + .state('tags', { + url: '/tags', + templateUrl: '/views/tags.html', + controller: 'tagsCtr' + }) + .state('advice', { + url: '/advice', + templateUrl: '/views/advice.html', + }) + .state('settings', { + url: '/settings', + templateUrl: '/views/settings.html', + }) + .state('register', { + url: '/register', templateUrl: '/views/register.html' - }) - .state('intro', { - url:'/intro', + }) + .state('intro', { + url: '/intro', templateUrl: '/views/intro.html' - }) - .state('/', { - url:'/', - templateUrl: '/views/intro.html' - }); + }) + .state('/', { + url: '/', + templateUrl: '/views/intro.html' + }); }); diff --git a/public/scripts/controllers/bookmarks-controller.js b/public/scripts/controllers/bookmarks-controller.js index 4f4cbb4..2750c9d 100644 --- a/public/scripts/controllers/bookmarks-controller.js +++ b/public/scripts/controllers/bookmarks-controller.js @@ -1,23 +1,29 @@ -app.controller('bookmarksCtr', ['$scope', '$filter', 'bookmarkService', function($scope, $filter, bookmarkService) { - $scope.bookmarks = []; // 书签数据 - // 获取书签数据 - var pageId = 1; - bookmarkService.getBookmarks(pageId).then( - function(data) { - console.log(data); - $scope.bookmarks = data; - $('.ui.dropdown').dropdown({ - forceSelection:false - }); - $('.ui.checkbox').checkbox(); - }, - function(errorMsg) { - console.log(errorMsg); - } - ); +app.controller('bookmarksCtr', ['$scope', '$filter', 'bookmarkService', 'pubSubService', function($scope, $filter, bookmarkService, pubSubService) { + console.log("Hello bookmarksCtr..."); + $scope.bookmarks = []; // 书签数据 + getBookmarks({ + s: 111, + b: 222, + i: 'lcq' + }); - $scope.addTag = function(){ - console.log('Hello , you click addtag btn...') + pubSubService.subscribe('MenuCtr.bookmarks', $scope, function(event, data) { + console.log('subscribe MenuCtr.bookmarks', data); + }); + + pubSubService.subscribe('MenuCtr.searchBookmarks', $scope, function(event, data) { + console.log(data); + }); + + function getBookmarks(params) { + bookmarkService.getBookmarks(params).then( + function(data) { + console.log(data); + $scope.bookmarks = data; + }, + function(errorMsg) { + console.log(errorMsg); + } + ); } - }]); diff --git a/public/scripts/controllers/menu-controller.js b/public/scripts/controllers/menu-controller.js index 26d9bb8..1e47038 100644 --- a/public/scripts/controllers/menu-controller.js +++ b/public/scripts/controllers/menu-controller.js @@ -1,7 +1,11 @@ -app.controller('menuCtr', ['$scope', '$state', function($scope, $state) { +app.controller('menuCtr', ['$scope', '$state', 'pubSubService', function($scope, $state, pubSubService) { $scope.login = true; /**< 是否登陆 */ $scope.selectLoginIndex = 0; /**< 默认登陆之后的选择的菜单索引,下表从 0 开始 */ $scope.selectNotLoginIndex = 0; /**< 默认未登陆之后的选择的菜单索引,下表从 0 开始 */ + if ($scope.login) { + setTimeout(()=>{$state.go('bookmarks')},0); + } + /** * @todo http://stackoverflow.com/questions/31449948/ui-router-state-go-not-working @@ -12,8 +16,7 @@ app.controller('menuCtr', ['$scope', '$state', function($scope, $state) { // 登陆之后显示的菜单数据。uiSerf:内部跳转链接。 $scope.loginMenus = [ - {uiSref:'bookmarks', title:'我的书签'}, - // {uiSref:'addBookmark', title:'添加书签'}, + {uiSref:'bookmarks', title:'书签'}, {uiSref:'tags', title:'书签分类'}, {uiSref:'advice', title:'建议'}, {uiSref:'settings', title:'设置'}, @@ -33,11 +36,24 @@ app.controller('menuCtr', ['$scope', '$state', function($scope, $state) { * @param {bool} login - 登陆标志 */ $scope.selectMenu = function(index, login){ + var msg = 'MenuCtr.'; if (login) { $scope.selectLoginIndex = index; + msg += $scope.loginMenus[index].uiSref; } else { $scope.selectNotLoginIndex = index; + msg += $scope.notLoginMenus[index].uiSref; } + console.log(msg); + pubSubService.publish(msg); + } + + /** + * @func + * @desc 点击搜索按钮搜索书签 + */ + $scope.searchBookmarks = function(){ + pubSubService.publish('MenuCtr.searchBookmarks', {'key': 'JavaScript'}); } $scope.showAddBookmarkMoadl = function(){ diff --git a/public/scripts/controllers/tags-controller.js b/public/scripts/controllers/tags-controller.js new file mode 100644 index 0000000..2e90771 --- /dev/null +++ b/public/scripts/controllers/tags-controller.js @@ -0,0 +1,25 @@ +app.controller('tagsCtr', ['$scope', '$filter', 'bookmarkService', 'pubSubService', function($scope, $filter, bookmarkService, pubSubService) { + console.log("Hello tagsCtr..."); + getTags({a:1, b:2, c:3}); + + $scope.tags = []; // 书签数据 + pubSubService.subscribe('MenuCtr.tags', $scope, function(event, data) { + console.log('subscribe MenuCtr.tags', data); + var params = {a:1, b:2, c:3}; + getTags(params); + + }); + + function getTags(params){ + bookmarkService.getTags(params).then( + function(data) { + console.log(data); + $scope.tags = data; + }, + function(errorMsg) { + console.log(errorMsg); + } + ); + } + +}]); diff --git a/public/scripts/directive/edit-directive.js b/public/scripts/directive/edit-directive.js new file mode 100644 index 0000000..5498d4e --- /dev/null +++ b/public/scripts/directive/edit-directive.js @@ -0,0 +1,8 @@ +app.directive('edit',function(){ + return { + restrict:'EAC', + templateUrl: '/views/bookmarks.html', + controller: 'bookmarksCtr', + replace:true + } +}); diff --git a/public/scripts/services/bookmark-service.js b/public/scripts/services/bookmark-service.js new file mode 100644 index 0000000..96229bf --- /dev/null +++ b/public/scripts/services/bookmark-service.js @@ -0,0 +1,56 @@ +app.factory('bookmarkService', ['$http', '$q', function($http, $q) { + // service interface + var service = { + /** + * @func + * @desc 根据显示页数的索引,获取书签的数据 + * @param {object} params - 参数 + */ + getBookmarks: function getBookmarks(params) { + var def = $q.defer(); + + $http.get('/api/bookmarks/', { + params: params + }) + .success(function(data) { + def.resolve(data); + }) + .error(function(data) { + console.log('Error: ' + data); + def.reject('Failed to get todos'); + }); + return def.promise; + }, + addBookmark: function() { + + }, + delBookmark: function() { + + }, + editBookmark: function() { + + }, + /** + * @func + * @desc 根据显示页数的索引,获取书签的数据 + * @param {object} params - 参数 + */ + getTags: function getTags(params) { + var def = $q.defer(); + $http.get('/api/tags/', { + params: params + }) + .success(function(data) { + def.resolve(data); + }) + .error(function(data) { + console.log('Error: ' + data); + def.reject('Failed to get todos'); + }); + return def.promise; + }, + // register: register + }; + + return service; +}]); diff --git a/public/scripts/services/bookmark-services.js b/public/scripts/services/bookmark-services.js deleted file mode 100644 index 89b30c4..0000000 --- a/public/scripts/services/bookmark-services.js +++ /dev/null @@ -1,36 +0,0 @@ -app.factory('bookmarkService', ['$http', '$q', function($http, $q) { - 'use strict'; - - // service interface - var service = { - /** - * @func - * @desc 根据显示页数的索引,获取书签的数据 - * @param {number} pageNum - 页数 - */ - getBookmarks: function getBookmarks(pageNum) { - var def = $q.defer(); - - $http.get('/api/bookmarks/' + pageNum) - .success(function(data) { - def.resolve(data); - }) - .error(function(data) { - console.log('Error: ' + data); - def.reject('Failed to get todos'); - }); - - return def.promise; - }, - // addBookmark: addBookmark, - // delBookmark: delBookmark, - // editBookmark: editBookmark, - // register: register - }; - - // Return a promise object. - - - - return service; -}]); diff --git a/public/scripts/services/pub-sub-service.js b/public/scripts/services/pub-sub-service.js new file mode 100644 index 0000000..5e3f2c1 --- /dev/null +++ b/public/scripts/services/pub-sub-service.js @@ -0,0 +1,53 @@ +// 这是一个通用的 发布订阅模块 +//参考:https://gist.github.com/turtlemonvh/10686980/038e8b023f32b98325363513bf2a7245470eaf80 +app.factory('pubSubService', ['$rootScope', function ($rootScope) { + // private notification messages + var _DATA_UPDATED_ = '_DATA_UPDATED_'; + /* + * @name: publish + * @description: 消息发布者,只用$emit冒泡进行消息发布的低能耗无污染方法 + * @param: {string=}: msg, 要发布的消息关键字,默认为'_DATA_UPDATED_'指数据更新 + * @param: {object=}: data,随消息一起传送的数据,默认为空 + * @example: + * pubSubService.publish('config.itemAdded', {'id': getID()}); + * 更一般的形式是: + * pubSubService.publish(); + */ + var publish = function (msg, data) { + msg = msg || _DATA_UPDATED_; + data = data || {}; + $rootScope.$emit(msg, data); + }; + /* + * @name: subscribe + * @description: 消息订阅者 + * @param: {string=}: 消息关键字,默认为'_DATA_UPDATED_'指数据更新 + * @param: {object=}: 控制器作用域,用以解绑定,默认为空 + * @param: {function}: 回调函数,在订阅消息到来时执行 + * @example: + * pubSubService.subscribe('data_change', $scope, function(event, data) { + * $scope.power = data.power; + * $scope.mass = data.mass; + * }); + * 更一般的形式是: + * pubSubService.subscribe(function(){}); + */ + var subscribe = function (msg, scope, func) { + if (!angular.isFunction(func)) { + console.log("pubSubService.subscribe need a callback function"); + return; + } + msg = msg || _DATA_UPDATED_; + var unbind = $rootScope.$on(msg, func); + //可控的事件反绑定机制 + if (scope) { + scope.$on('$destroy', unbind); + } + }; + + // return the publicly accessible methods + return { + publish: publish, + subscribe: subscribe + }; +}]) diff --git a/public/views/tags.html b/public/views/tags.html index ba79ab5..65ea7a7 100644 --- a/public/views/tags.html +++ b/public/views/tags.html @@ -1 +1 @@ -
书签分类页面
+{{ tag }}
diff --git a/routes/api.js b/routes/api.js index b5620a4..1b29ae0 100644 --- a/routes/api.js +++ b/routes/api.js @@ -1,8 +1,8 @@ var api = require('express').Router(); -api.get('/bookmarks/:pageId', function (req, res) { - console.log('hello query', JSON.stringify(req.params.pageId)); +api.get('/bookmarks', function (req, res) { + console.log('hello bookmarks', JSON.stringify(req.query)); var data = [ {title:'谷歌', description:'一个网站', url:'https://www.google.com.hk/', tags:['搜索','常用']}, @@ -14,4 +14,10 @@ api.get('/bookmarks/:pageId', function (req, res) { res.json(data); }); +api.get('/tags', function (req, res) { + console.log('hello tags', JSON.stringify(req.query)); + var data = ['搜索', '常用', '新闻', '博文', 'JavaScript'] + res.json(data); +}); + module.exports = api;