终于弄懂了传params后台如何收到

This commit is contained in:
luchenqun 2016-10-24 17:43:07 +08:00
parent f049bb2b39
commit cd97a74771
9 changed files with 150 additions and 22 deletions

View File

@ -29,7 +29,7 @@
<div class="ui category right search item"> <div class="ui category right search item">
<div class="ui transparent icon input"> <div class="ui transparent icon input">
<input class="prompt" type="text" placeholder="请输入书签的Url..."> <input class="prompt" type="text" placeholder="请输入书签的Url...">
<i class="search link icon"></i> <i class="search link icon" ng-click="searchBookmarks()"></i>
</div> </div>
<div class="results"></div> <div class="results"></div>
</div> </div>
@ -60,8 +60,10 @@
<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/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/externe/semantic.min.js"></script> <script src="/scripts/externe/semantic.min.js"></script>
<script src="/scripts/semantic-init.js"></script> <script src="/scripts/semantic-init.js"></script>

View File

@ -14,6 +14,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,15 +1,25 @@
app.controller('bookmarksCtr', ['$scope', '$filter', 'bookmarkService', function($scope, $filter, bookmarkService) { app.controller('bookmarksCtr', ['$scope', '$filter', 'bookmarkService', 'pubSubService', function($scope, $filter, bookmarkService, pubSubService) {
$scope.bookmarks = []; // 书签数据 console.log("Hello bookmarksCtr...");
$scope.bookmarks = []; // 书签数据
getBookmarks({s:111, b:222, i:'lcq'});
// 获取书签数据 pubSubService.subscribe('MenuCtr.bookmarks', $scope, function(event, data) {
var pageId = 1; console.log('subscribe MenuCtr.bookmarks', data);
bookmarkService.getBookmarks(pageId).then( });
function(data) {
console.log(data); pubSubService.subscribe('MenuCtr.searchBookmarks', $scope, function(event, data) {
$scope.bookmarks = data; console.log(data);
}, });
function(errorMsg) {
console.log(errorMsg); function getBookmarks(params){
} bookmarkService.getBookmarks(params).then(
); function(data) {
console.log(data);
$scope.bookmarks = data;
},
function(errorMsg) {
console.log(errorMsg);
}
);
}
}]); }]);

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,7 +16,7 @@ app.controller('menuCtr', ['$scope', '$state', function($scope, $state) {
// 登陆之后显示的菜单数据。uiSerf内部跳转链接。 // 登陆之后显示的菜单数据。uiSerf内部跳转链接。
$scope.loginMenus = [ $scope.loginMenus = [
{uiSref:'bookmarks', title:'我的书签'}, {uiSref:'bookmarks', title:'书签'},
{uiSref:'tags', title:'书签分类'}, {uiSref:'tags', title:'书签分类'},
{uiSref:'advice', title:'建议'}, {uiSref:'advice', title:'建议'},
{uiSref:'settings', title:'设置'}, {uiSref:'settings', title:'设置'},
@ -32,10 +36,23 @@ 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'});
} }
}]); }]);

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

@ -7,14 +7,15 @@ app.factory('bookmarkService', ['$http', '$q', function($http, $q) {
// addBookmark: addBookmark, // addBookmark: addBookmark,
// delBookmark: delBookmark, // delBookmark: delBookmark,
// editBookmark: editBookmark, // editBookmark: editBookmark,
getTags:getTags,
// register: register // register: register
}; };
// Return a promise object. // Return a promise object.
function getBookmarks(pageId) { function getBookmarks(params) {
var def = $q.defer(); var def = $q.defer();
$http.get('/api/bookmarks/'+pageId) $http.get('/api/bookmarks/', {params:params})
.success(function(data) { .success(function(data) {
def.resolve(data); def.resolve(data);
}) })
@ -26,6 +27,19 @@ app.factory('bookmarkService', ['$http', '$q', function($http, $q) {
return def.promise; 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; 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;