diff --git a/public/index.html b/public/index.html index 25712f2..0a57fe9 100644 --- a/public/index.html +++ b/public/index.html @@ -29,7 +29,7 @@ @@ -60,8 +60,10 @@ - + + + diff --git a/public/scripts/app-angular.js b/public/scripts/app-angular.js index 299bb55..9ce9cff 100644 --- a/public/scripts/app-angular.js +++ b/public/scripts/app-angular.js @@ -14,6 +14,7 @@ app.config(function ($stateProvider, $urlRouterProvider) { .state('tags', { url:'/tags', templateUrl: '/views/tags.html', + controller: 'tagsCtr' }) .state('advice', { url:'/advice', diff --git a/public/scripts/controllers/bookmarks-controller.js b/public/scripts/controllers/bookmarks-controller.js index eaeb430..34e749a 100644 --- a/public/scripts/controllers/bookmarks-controller.js +++ b/public/scripts/controllers/bookmarks-controller.js @@ -1,15 +1,25 @@ -app.controller('bookmarksCtr', ['$scope', '$filter', 'bookmarkService', function($scope, $filter, bookmarkService) { - $scope.bookmarks = []; // 书签数据 +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'}); - // 获取书签数据 - var pageId = 1; - bookmarkService.getBookmarks(pageId).then( - function(data) { - console.log(data); - $scope.bookmarks = data; - }, - function(errorMsg) { - console.log(errorMsg); - } - ); + 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 8b65049..184e9cb 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,7 +16,7 @@ app.controller('menuCtr', ['$scope', '$state', function($scope, $state) { // 登陆之后显示的菜单数据。uiSerf:内部跳转链接。 $scope.loginMenus = [ - {uiSref:'bookmarks', title:'我的书签'}, + {uiSref:'bookmarks', title:'书签'}, {uiSref:'tags', title:'书签分类'}, {uiSref:'advice', title:'建议'}, {uiSref:'settings', title:'设置'}, @@ -32,10 +36,23 @@ 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'}); } }]); 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/services/bookmark-services.js b/public/scripts/services/bookmark-service.js similarity index 56% rename from public/scripts/services/bookmark-services.js rename to public/scripts/services/bookmark-service.js index 1300ad8..65080dc 100644 --- a/public/scripts/services/bookmark-services.js +++ b/public/scripts/services/bookmark-service.js @@ -7,14 +7,15 @@ app.factory('bookmarkService', ['$http', '$q', function($http, $q) { // addBookmark: addBookmark, // delBookmark: delBookmark, // editBookmark: editBookmark, + getTags:getTags, // register: register }; // Return a promise object. - function getBookmarks(pageId) { + function getBookmarks(params) { var def = $q.defer(); - $http.get('/api/bookmarks/'+pageId) + $http.get('/api/bookmarks/', {params:params}) .success(function(data) { def.resolve(data); }) @@ -26,6 +27,19 @@ app.factory('bookmarkService', ['$http', '$q', function($http, $q) { return def.promise; } + // Return a promise object. + 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; + } 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;