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;