合并代码

This commit is contained in:
luchenqun 2016-10-24 20:35:59 +08:00
commit 6743d95211
11 changed files with 232 additions and 96 deletions

View File

@ -59,9 +59,11 @@
<script src="/scripts/externe/angular.min.js"></script> <script src="/scripts/externe/angular.min.js"></script>
<script src="/scripts/externe/angular-ui-router.min.js"></script> <script src="/scripts/externe/angular-ui-router.min.js"></script>
<script src="/scripts/app-angular.js"></script> <script src="/scripts/app-angular.js"></script>
<script src="/scripts/services/bookmark-services.js"></script> <script src="/scripts/services/bookmark-service.js"></script>
<script src="/scripts/services/pub-sub-service.js"></script>
<script src="/scripts/directives/edit-directive.js"></script> <script src="/scripts/directives/edit-directive.js"></script>
<script src="/scripts/controllers/bookmarks-controller.js"></script> <script src="/scripts/controllers/bookmarks-controller.js"></script>
<script src="/scripts/controllers/tags-controller.js"></script>
<script src="/scripts/controllers/menu-controller.js"></script> <script src="/scripts/controllers/menu-controller.js"></script>
<script src="/scripts/controllers/edit-controller.js"></script> <script src="/scripts/controllers/edit-controller.js"></script>
<script src="/scripts/externe/semantic.min.js"></script> <script src="/scripts/externe/semantic.min.js"></script>

View File

@ -8,7 +8,6 @@ app.config(function ($stateProvider, $urlRouterProvider) {
.state('bookmarks', { .state('bookmarks', {
url: '/bookmarks', url: '/bookmarks',
templateUrl: '/views/bookmarks.html', templateUrl: '/views/bookmarks.html',
// controllerAs: 'bookmarksCtrl',
controller: 'bookmarksCtr' controller: 'bookmarksCtr'
}) })
.state('addBookmark', { .state('addBookmark', {
@ -18,6 +17,7 @@ app.config(function ($stateProvider, $urlRouterProvider) {
.state('tags', { .state('tags', {
url: '/tags', url: '/tags',
templateUrl: '/views/tags.html', templateUrl: '/views/tags.html',
controller: 'tagsCtr'
}) })
.state('advice', { .state('advice', {
url: '/advice', url: '/advice',

View File

@ -1,23 +1,29 @@
app.controller('bookmarksCtr', ['$scope', '$filter', 'bookmarkService', function($scope, $filter, bookmarkService) { app.controller('bookmarksCtr', ['$scope', '$filter', 'bookmarkService', 'pubSubService', function($scope, $filter, bookmarkService, pubSubService) {
console.log("Hello bookmarksCtr...");
$scope.bookmarks = []; // 书签数据 $scope.bookmarks = []; // 书签数据
// 获取书签数据 getBookmarks({
var pageId = 1; s: 111,
bookmarkService.getBookmarks(pageId).then( b: 222,
i: 'lcq'
});
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) { function(data) {
console.log(data); console.log(data);
$scope.bookmarks = data; $scope.bookmarks = data;
$('.ui.dropdown').dropdown({
forceSelection:false
});
$('.ui.checkbox').checkbox();
}, },
function(errorMsg) { function(errorMsg) {
console.log(errorMsg); console.log(errorMsg);
} }
); );
$scope.addTag = function(){
console.log('Hello , you click addtag btn...')
} }
}]); }]);

View File

@ -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.login = true; /**< 是否登陆 */
$scope.selectLoginIndex = 0; /**< 默认登陆之后的选择的菜单索引,下表从 0 开始 */ $scope.selectLoginIndex = 0; /**< 默认登陆之后的选择的菜单索引,下表从 0 开始 */
$scope.selectNotLoginIndex = 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 * @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内部跳转链接。 // 登陆之后显示的菜单数据。uiSerf内部跳转链接。
$scope.loginMenus = [ $scope.loginMenus = [
{uiSref:'bookmarks', title:'我的书签'}, {uiSref:'bookmarks', title:'书签'},
// {uiSref:'addBookmark', title:'添加书签'},
{uiSref:'tags', title:'书签分类'}, {uiSref:'tags', title:'书签分类'},
{uiSref:'advice', title:'建议'}, {uiSref:'advice', title:'建议'},
{uiSref:'settings', title:'设置'}, {uiSref:'settings', title:'设置'},
@ -33,11 +36,24 @@ app.controller('menuCtr', ['$scope', '$state', function($scope, $state) {
* @param {bool} login - 登陆标志 * @param {bool} login - 登陆标志
*/ */
$scope.selectMenu = function(index, login){ $scope.selectMenu = function(index, login){
var msg = 'MenuCtr.';
if (login) { if (login) {
$scope.selectLoginIndex = index; $scope.selectLoginIndex = index;
msg += $scope.loginMenus[index].uiSref;
} else { } else {
$scope.selectNotLoginIndex = index; $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(){ $scope.showAddBookmarkMoadl = function(){

View File

@ -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);
}
);
}
}]);

View File

@ -0,0 +1,8 @@
app.directive('edit',function(){
return {
restrict:'EAC',
templateUrl: '/views/bookmarks.html',
controller: 'bookmarksCtr',
replace:true
}
});

View File

@ -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;
}]);

View File

@ -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;
}]);

View File

@ -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
};
}])

View File

@ -1 +1 @@
<p> 书签分类页面 </p> <p ng-repeat="tag in tags"> {{ tag }} </p>

View File

@ -1,8 +1,8 @@
var api = require('express').Router(); var api = require('express').Router();
api.get('/bookmarks/:pageId', function (req, res) { api.get('/bookmarks', function (req, res) {
console.log('hello query', JSON.stringify(req.params.pageId)); console.log('hello bookmarks', JSON.stringify(req.query));
var data = [ var data = [
{title:'谷歌', description:'一个网站', url:'https://www.google.com.hk/', tags:['搜索','常用']}, {title:'谷歌', description:'一个网站', url:'https://www.google.com.hk/', tags:['搜索','常用']},
@ -14,4 +14,10 @@ api.get('/bookmarks/:pageId', function (req, res) {
res.json(data); 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; module.exports = api;