合并代码
This commit is contained in:
commit
6743d95211
|
|
@ -59,9 +59,11 @@
|
|||
<script src="/scripts/externe/angular.min.js"></script>
|
||||
<script src="/scripts/externe/angular-ui-router.min.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/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/edit-controller.js"></script>
|
||||
<script src="/scripts/externe/semantic.min.js"></script>
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
url: '/bookmarks',
|
||||
templateUrl: '/views/bookmarks.html',
|
||||
// controllerAs: 'bookmarksCtrl',
|
||||
controller: 'bookmarksCtr'
|
||||
})
|
||||
.state('addBookmark', {
|
||||
url:'/addBookmark',
|
||||
url: '/addBookmark',
|
||||
templateUrl: '/views/addBookmark.html',
|
||||
})
|
||||
.state('tags', {
|
||||
url:'/tags',
|
||||
url: '/tags',
|
||||
templateUrl: '/views/tags.html',
|
||||
controller: 'tagsCtr'
|
||||
})
|
||||
.state('advice', {
|
||||
url:'/advice',
|
||||
url: '/advice',
|
||||
templateUrl: '/views/advice.html',
|
||||
})
|
||||
.state('settings', {
|
||||
url:'/settings',
|
||||
url: '/settings',
|
||||
templateUrl: '/views/settings.html',
|
||||
})
|
||||
.state('register', {
|
||||
url:'/register',
|
||||
url: '/register',
|
||||
templateUrl: '/views/register.html'
|
||||
})
|
||||
.state('intro', {
|
||||
url:'/intro',
|
||||
url: '/intro',
|
||||
templateUrl: '/views/intro.html'
|
||||
})
|
||||
.state('/', {
|
||||
url:'/',
|
||||
url: '/',
|
||||
templateUrl: '/views/intro.html'
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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 = []; // 书签数据
|
||||
// 获取书签数据
|
||||
var pageId = 1;
|
||||
bookmarkService.getBookmarks(pageId).then(
|
||||
getBookmarks({
|
||||
s: 111,
|
||||
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) {
|
||||
console.log(data);
|
||||
$scope.bookmarks = data;
|
||||
$('.ui.dropdown').dropdown({
|
||||
forceSelection:false
|
||||
});
|
||||
$('.ui.checkbox').checkbox();
|
||||
},
|
||||
function(errorMsg) {
|
||||
console.log(errorMsg);
|
||||
}
|
||||
);
|
||||
|
||||
$scope.addTag = function(){
|
||||
console.log('Hello , you click addtag btn...')
|
||||
}
|
||||
|
||||
}]);
|
||||
|
|
|
|||
|
|
@ -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(){
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
}]);
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
app.directive('edit',function(){
|
||||
return {
|
||||
restrict:'EAC',
|
||||
templateUrl: '/views/bookmarks.html',
|
||||
controller: 'bookmarksCtr',
|
||||
replace:true
|
||||
}
|
||||
});
|
||||
|
|
@ -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;
|
||||
}]);
|
||||
|
|
@ -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;
|
||||
}]);
|
||||
|
|
@ -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
|
||||
};
|
||||
}])
|
||||
|
|
@ -1 +1 @@
|
|||
<p> 书签分类页面 </p>
|
||||
<p ng-repeat="tag in tags"> {{ tag }} </p>
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue