ã¢ããªã«ã¯ããŠãŒã¶ãŒã衚瀺ããã®ãšåãããŒãžã«æ°ãããã®ãäœæãããšãããã©ãã€ã ããããŸãã ãããã£ãŠãã«ãŒãã¯/ things /ïŒidã®ããã«ãªããŸãã æ°ãããã®ãäœæãããšãã圌ãã¯/ things / newã«è¡ããŸãã ã¢ããæ£åžžã«ä¿åãããããã«ãŒãã/ things / 1234ïŒãŸãã¯ãã®æ°ããIDïŒã«å€æŽããŸãã ããŒã¿ã¯ãã¹ãŠåãã§ãããããããŒã·ã£ã«ããªããŒãããå¿ èŠã¯ãããŸããã ãŠãŒã¶ãŒãæ£ãããªã³ã¯ãªã©ãããã¯ããŒã¯ã§ããããã«ããã¹ãæŽæ°ããã ãã§ãã
ã«ãŒãã®èªã¿èŸŒã¿ãæå¹/ç¡å¹ã«ãããªãã·ã§ã³ãïŒã«ãŒãå®çŸ©ã§ã¯ãªãïŒ$ locationã«èšå®ãããšæ©èœããŸããããã®æ©èœãå®è£ ããæ¹æ³ã¯ä»ã«ããããšæããŸãã
+1ãåãåé¡ããããŸãã
@cgross $ locationãµãŒãã¹ã¯JQueryã¹ã¿ã€ã«ã®ã¡ãœãããã§ãŒã³ã䜿çšãããã¹ãŠã®ã³ãã³ãã¯$ digestãŸã§å»¶æããããããreloadïŒbooleanïŒãªã©ã®æ°ãããã§ãŒã³ã¡ãœãããè¿œå ããããšããå§ãããŸãã
$location.path("/thing/"+thing.id).replace().reload(false)
PSããã¯Eclipseæé²ãããžã§ã¯ããéå§ããã¯ãªã¹ã°ãã¹ã§ããïŒ
ãã ïŒïŒ
+1ïŒ+1ïŒ
+1
çŸåšããã®åé¡ãåé¿ããããã«ããŒãã£ããã¯ã䜿çšããŠããŸãã
$scope.$on('$locationChangeSuccess', function(event) {
// Want to prevent re-loading when going from /dataEntry/1 to some other dataEntry path
if ($route && $route.current && $route.current.$route.templateUrl.indexOf('dataEntry') > 0) {
$route.current = lastRoute; //Does the actual prevention of routing
}
});
+1
+1
+1
+1
+1
preventDefault()
ã«å¯ŸããŠ$routeChangeStart
preventDefault()
ããµããŒãããããšã«ããããããä¿®æ£ããç§ã®è©Šã¿ã¯æ¬¡ã®ãšããã§ãã ããã«ã€ããŠã©ãæãïŒ
ã³ãããïŒ https ïŒ
ç§ã¯æ°æ¥é@qualidafialã¢ãããŒãã«åãçµãã§ããŸããããããã§PRã®æºåãæŽããŸããã å Žæã®å€æŽéç¥ãäžåºŠã¹ãããã§ããæ°ããnotify
ã¡ãœãããäœæããŸããã ããã«ãããã«ãŒãã®å€æŽããªããŒããããªã¬ãŒãããªãããã«ããå¿
èŠããããŸãã
ããã¯ã«ãŒãã£ã³ã°ã·ã¹ãã ã«åœ±é¿ãäžããªããããã«ãŒãå®çŸ©ãå€æŽããå¿
èŠã¯ãããŸããã æšæºã®AngularJSã«ãŒãã£ã³ã°ã·ã¹ãã ã®ä»£ããã«ui-router
ã䜿çšããŠããåŒãç¶ãæ©èœããŸãã
äŸïŒ $location.path('/client/2').replace().notify(false);
ãŸããããã€ãã®ãã¹ããšããã¥ã¡ã³ãã®ããããåŠçããŸããã
+1
å¥ã®+1
ãã§ã«@lrlopezã®ãã«ãªã¯ãšã¹ãã䜿çšããŠããŸãã ãã£ãŒã ã®ããã«æ©èœããŸãã
+1
+1
æ®å¿µãªãããPR https://github.com/angular/angular.js/pull/2398ã¯ãéç¥ãã¹ããããããšå®éã®URLãšçŸåšã®ã«ãŒãã®éã«äžæŽåãçããå¯èœæ§ããããããAngularããŒã ã«ãã£ãŠæåŠãããŸããã è°è«ã®çµããã«é·ã説æããããŸãã
ãã®æ©èœã¯ã©ã®ãããžã§ã¯ãã«ãå¿ èŠãããŸããããå¿ èŠã«å¿ããŠããŒãžã§ããããã«ããªããžããªã«ä¿æããŸãã å€æŽããªããŒã¹ã§ããããã«ããã¹ã¿ãŒãã©ã³ããšåæããªããªã£ãå Žåã¯ãç¥ãããã ããã ããããšãïŒ
+1
+1ããããå¿ èŠã§ã:(
+1
ç·šéïŒããã§ããè¯ãã¢ãããŒãïŒ https ïŒ
ãããåé¿ããããã«åå©çšå¯èœãªãã¡ã¯ããªãäœæããŸããïŒ@shahmirnã®ã¢ã€ãã¢ã«åºã¥ããŠããŸãïŒã
/**
* HACK Do not reload the current template if it is not needed.
*
* See AngularJS: Change hash and route without completely reloading controller http://stackoverflow.com/questions/12115259/angularjs-change-hash-and-route-without-completely-reloading-controller
*/
app.factory('DoNotReloadCurrentTemplate', ['$route', function($route) {
return function(scope) {
var lastRoute = $route.current;
scope.$on('$locationChangeSuccess', function() {
if (lastRoute.$$route.templateUrl === $route.current.$$route.templateUrl) {
console.log('DoNotReloadCurrentTemplate not reloading template: ' + $route.current.$$route.templateUrl);
$route.current = lastRoute;
}
});
};
}]);
䜿ãæ¹ïŒ
app.controller('MyCtrl',
['$scope', 'DoNotReloadCurrentTemplate',
function($scope, DoNotReloadCurrentTemplate) {
DoNotReloadCurrentTemplate($scope);
}]);
ãœãŒã¹ïŒ http ïŒ
ã«ãŒãã§ãreloadOnSearchããfalseã«èšå®ãããšãããŒãžå šäœãåèªã¿èŸŒã¿ããããã·ã¥ã®å€æŽãä¿®æ£ãããããã§ãã
+1
ããã¯ãng-viewã®äœæ/ç Žæ£ã®ã©ã€ããµã€ã¯ã«ãé©åã§ãªãïŒããã©ãŒãã³ã¹ãšäœ¿ãããããæãªãïŒã¢ãã€ã«ã¢ããªã«æé©ã§ãã
@tkrotoffäŸãããããšãã åé¿çã¯ã€ãã³ãéç¥ããã£ã³ã»ã«ãããããã«ãŒãã¹ã³ãŒãã«ãããŒããã£ã¹ããè¿œå ããŠãä»ã®ã³ã³ãããŒã©ãŒã«ã«ãŒãå€æŽãéç¥ã§ããããã«ããŸããã
/**
* HACK Do not reload the current template if it is not needed.
*
* See AngularJS: Change hash and route without completely reloading controller http://stackoverflow.com/questions/12115259/angularjs-change-hash-and-route-without-completely-reloading-controller
*/
app.factory('DoNotReloadCurrentTemplate', ['$route', '$rootScope', function($route, $rootScope) {
return function(scope) {
var lastRoute = $route.current;
scope.$on('$locationChangeSuccess', function() {
if (lastRoute.$$route.templateUrl === $route.current.$$route.templateUrl) {
console.log('DoNotReloadCurrentTemplate not reloading template: ' + $route.current.$$route.templateUrl);
$rootScope.$broadcast('locationChangedWithoutReload', $route.current);
$route.current = lastRoute;
}
});
};
}]);
ããã§ïŒ
app.controller('MyCtrl',
['$scope', 'DoNotReloadCurrentTemplate',
function($scope, DoNotReloadCurrentTemplate) {
DoNotReloadCurrentTemplate($scope);
$rootScope.$on('locationChangedWithoutReload', function(event, route) {
// set location specific breadcrumbs
$scope.breadcrumbs = assembleBreadCrumbs();
// do something for specific route
if (route.$$route.action == 'item') {
$scope.item = $scope.items[params.itemId];
$rootScope.title = $scope.item.name;
}
});
}]);
ãããã¯ã®äœæè ãæã£ãŠããã®ãšåãåé¡ããããäžèšã®ãœãªã¥ãŒã·ã§ã³ã®ä¿®æ£ããŒãžã§ã³ãäœæããŸããã
app.factory('skipReload', [
'$route',
'$rootScope',
function ($route, $rootScope) {
return function () {
var lastRoute = $route.current;
var un = $rootScope.$on('$locationChangeSuccess', function () {
$route.current = lastRoute;
un();
});
};
}
]);
䜿çšæ³ïŒ
app.controller('ThingCtrl', ['$scope', '$http', '$location', 'skipReload', function ($scope, $http, $location, skipReload) {
...
$scope.submit = function () {
...
$http.post('thing', thing).success(function (id) {
skipReload();
$location.path('/thing/' + id).replace();
});
};
}]);
templateUrlããã¹ãããŠã«ãŒãã®ãªããŒããèš±å¯ãããã©ããã決å®ããæ°žç¶çãªã€ãã³ããªã¹ããŒã䜿çšãããšãåãtemplateUrlã䜿çšããä»ã®ãã¥ãŒãžã®ã«ãŒãã£ã³ã°ãäžæãããå¯èœæ§ããããŸãã ããšãã°ã/ things / newã«ã«ãŒãã£ã³ã°ãããšãæåŸã«è¿œå ãããthing / things / 5ãžã®ãªã³ã¯ã衚瀺ãããthing 5ããã®ä»ã®thingã«ç§»åã§ããªããªããŸãïŒãã©ãŠã¶ã§URLãæ瀺çã«å€æŽããŠãïŒã templateUrlãã¹ãã®ãã1ã€ã®åé¡ã¯ããã³ãã¬ãŒãããããã£ãïŒæååãŸãã¯é¢æ°ãšããŠïŒäœ¿çšããŠãã³ãã¬ãŒããæå®ã§ããããšã§ãã
ãã®ããã¯ã«ãããã«ãŒãã®ãªããŒãã1ã€ã ãã¹ãããã§ããã«ãŒãã£ã³ã°ãäžæãããããšã¯ãããŸããã
ãŸããïŒã³ã³ãããŒã©ãŒã§äœ¿çšããããã®ïŒåé·æ§ã®äœããœãªã¥ãŒã·ã§ã³ãè©ŠããŸããã
app.factory('location', [
'$location',
'$route',
'$rootScope',
function ($location, $route, $rootScope) {
$location.skipReload = function () {
var lastRoute = $route.current;
var un = $rootScope.$on('$locationChangeSuccess', function () {
$route.current = lastRoute;
un();
});
return $location;
};
return $location;
}
]);
app.controller('ThingCtrl', ['$scope', '$http', 'location', function ($scope, $http, location) {
...
$scope.submit = function () {
...
$http.post('thing', thing).success(function (id) {
location.skipReload().path('/thing/' + id).replace();
});
};
}]);
æ£åžžã«åäœããŠããããã§ãã
+1
@ sergey-buturlakinããªãã®$ location.skipReloadã¯çŽ æŽãããã§ãïŒ DoNotReloadCurrentTemplateã®ä»£ããã«äœ¿çšããŸã
@ sergey-buturlakinããªãã®è§£æ±ºçã¯ç§ã®ããã«åããŠããããã§ãã ããããšãïŒ
https://github.com/angular/angular.js/issues/1699#issuecomment -22511464ããskipReload()
ãå®è¡ããåŸããªããŒããç¡å¹ã«ãªãç¶ããŸã
un()
ã¯åŸã§åŒã³åºãå¿
èŠãããããã§ã
次ã®ãªããŒããé²ãããã¹å€æŽã®çŽåã«åŒã³åºãå¿
èŠããããŸãã
ãã¹ã®å€æŽãçµäºãããšããunããåŒã³åºãããŸãã
ã¯ãããããç§ã¯ãªããŒããäžåºŠã ãã¹ããããããã£ãã®ã§ãããææ¡ãããã¢ãããŒãã¯ãã以äžã®ãªããŒããé²ããŸã
+1
+1
+1
PRhttps ïŒ//github.com/angular/angular.js/pull/2398ã¯ãªããŒãã1åã ãã¹ãããããŸãã çŸåšã®ãã¹ã¿ãŒãšã®ããŒãžã®ç«¶åããããã©ããã¯ããããŸããã ãã®å Žåã¯ãç§ã«é£çµ¡ããŠãã ãããä¿®æ£ããŸãã
ç§ã¯sergeyã®ãœãªã¥ãŒã·ã§ã³ã䜿çšãã圹ã«ç«ããªãïŒç§ã«ããã°ïŒãunãå€æ°ãåé€ããŠåŒã³åºããŸãã
ããã¯ã«ã€ãªãããŸãïŒ
angular.module('services.locationChanger', [])
.service('locationChanger', ['$location', '$route', '$rootScope', function ($location, $route, $rootScope) {
this.skipReload = function () {
var lastRoute = $route.current;
$rootScope.$on('$locationChangeSuccess', function () {
$route.current = lastRoute;
});
return this;
};
this.withoutRefresh = function (url, doesReplace) {
if(doesReplace){
$location.path(url).replace();
}
else {
$location.path(url || '/');
}
};
}]);
ããã³çºä¿¡è ïŒ
locationChanger.skipReload().withoutRefresh("/", true);
+1
+1
+1
+1
@ mica16 un
å€æ°ã¯ãã€ãã³ãã®ãã€ã³ãã解é€ããããã«äœ¿çšãããŠããŸãããïŒ
ç§ã¯ããã¹ãã®ããã®2ã€ã®plunkrsãäœæãããšãããªãun
ã€ãã³ããã¢ã³ãã€ã³ãããå€æ°ãšããããªãã§ã€ãã³ããäœåºŠãäœåºŠãçºå°ããç¶æããŠããããã§ã
ã¯ãã確ãã«ã un
å€æ°ã¯å¥åŠã«èãããŸãã
å
ã®äœè
ã«ãããšãããã¯æçšã§ãããšèããããŸããããããç§ã¯ãããå®ç§ãªè§£æ±ºçã§ãããšã¯ç¢ºä¿¡ããŠããŸããã
ç§ã¯ãããæžãçŽãããšã奜ã¿ãŸããããããç§ã¯ãããããæåŸ ããªãã®ã§æ©èœããŽãç®±ã«æšãŠãŸããã
ãããã£ãŠãåäœãã¹ãã§æåŸ ã©ããã«æ©èœããããšã確èªã§ããå Žåã¯ãããã䜿çšããŠãã ãã:)
ããªãã¯æ£ãã人ã§ã
ç§ã®è§£æ±ºçã¯
app.factory 'location', ['$location', '$route', '$rootScope', '$timeout', ($location, $route, $rootScope, $timeout) ->
$location.skipReload = ->
lastRoute = $route.current
un = $rootScope.$on('$locationChangeSuccess', ->
$route.current = lastRoute
)
$timeout((->
un()
), 1000)
$location
$location
]
ãã®åŸãã³ã³ãããŒã©ãŒã§
location.skipReload().path('/new/path').replace()
+1
+1
+1
+1
ãããè¡ãå¥ã®æ¹æ³ã¯ãçŸåšã®javascriptã®ãã¹ããããããå€ããŠãrouteãwindow.locationã«å ããããå€æŽãèªèããªãããã«ããããšã§ãã
setTimeout(function() {
window.location.hash = "";
if (typeof (history.pushState) !== "undefined") {
history.pushState("", document.title, location.pathname);
}
}, 0);
+1
+1
+1
+1
$ anchorScrollã䜿çšããã®ã¯ã©ãã§ããïŒ ç§ã¯ããããçªã£ã€ããŠããŸãããããããè¡ãããã®ããŒã«ãããã€ãããããšãããããŸããã å°ãªããšãç§ã«ãšã£ãŠã¯ããŸããããŸãã
http://docs.angularjs.org/api/ngã§ç¢ºèªããå¿ èŠããã
+1
ããã¯æªãèãã§ããïŒ ç§ã¯ãããåºç¯å²ã«ãã¹ãããŠããªãããšãèªããŸãã ãã¹ãèšå®ããåã«å¥ã®ã¡ãœãããåŒã³åºããšããã¢ã€ãã¢ã¯å¥œãã§ã¯ãããŸããã§ããã 䜿çšæ³ã®èŠ³ç¹ããã¯ãå°ãªããšãããã¯ããã¯ãªãŒã³ã«èŠããŸãã
sergeyã®ææ³ã䜿çšããŠãçµã¿èŸŒã¿ã®$ location.pathé¢æ°ãæ¡åŒµããŸããã
App.run(['$route', '$rootScope', '$location', function ($route, $rootScope, $location) {
var original = $location.path;
$location.path = function (path, reload) {
if (reload === false) {
var lastRoute = $route.current;
var un = $rootScope.$on('$locationChangeSuccess', function () {
$route.current = lastRoute;
un();
});
}
return original.apply($location, [path]);
};
}])
䜿çšæ³ïŒ
$location.path('/my/path', false);
+1
@EvanWinstanleyãœãªã¥ãŒã·ã§ã³ã¯ç§ã®ããã«åããŸããããããšãïŒ
+1
@ EvanWinstanley / sergeyã®ä¿®æ£ã¯èŠæ ãããããã³ã³ãããŒã©ãŒããªããŒãããŸããããã«ãŒããå€æŽãããšã解決ãå床èŠæ±ãããŸãã
ããã®ç§ã®äž»ãªäœ¿çšäŸã¯ãresolves / controllerããªããŒãããã«ã$ location.pathãæåã§å€æŽããããšã§ããããã«ããããã£ãã·ã¥ãå®è¡ã§ããããã«ãªããŸãã
äŸïŒãŠãŒã¶ãŒãè€æ°ã®ã¢ããªã±ãŒã·ã§ã³ããéžæã§ããããã«ããselectããããŸããããã«ããã$ location.pathãããé©åãªURLã«å€æŽãããŸãã ãŠãŒã¶ãŒãã¢ããªã±ãŒã·ã§ã³ãéžæãããšãAPIåŒã³åºãã®çµæããã£ãã·ã¥ãããŸãã ä¿®æ£ããŠããåžžã«è§£æ±ºãåå®è¡ãããŸããããã¯ãçµæããã§ã«ãã£ãã·ã¥ãããŠããããäžèŠã§ãã
+1
@ sergey-buturlakinãœãªã¥ãŒã·ã§ã³ã¯ç§ã«ãšã£ãŠã¯æ£åžžã«æ©èœããŸããã³ã³ãããŒã©ãŒããªããŒãããŸããããresloveé¢æ°ããªããŒããããµãŒããŒã«ãªã¯ãšã¹ããéä¿¡ããŸãã
+1
@EvanWinstanleyã®ãœãªã¥ãŒã·ã§ã³ã¯ç§ã«ã¯æ©èœããŠããŸããã äžæ¹ã @ mica16ã®ãœãªã¥ãŒã·ã§ã³ã¯ããŸãæ©èœããããŸãã...ïŒæ»ããã¿ã³ã¯ããŒãžãæŽæ°ããŸããã§ããïŒã ç§ã¯æåããã«èªåã®ããŒãžã§ã³ãæžã蟌ãããšããŸãã:(ã
+1
+1
+1
+1
ãµããŒãããŠãã ããïŒ$ location.reloadïŒïŒ;
@jvmvik $route.current.reload()
ãè©ŠããŸãããïŒ
7.1.1
1幎以äžçµã£ãŠãããã«ã€ããŠã®ãã¥ãŒã¹ã¯ãããŸãããïŒ
+1
+1
Sergeyã®ãœãªã¥ãŒã·ã§ã³ãå°ãæ¹åããŸããã
ããã§ãããŒãžå
šäœããªããŒãããã«ãããšãã°ã¿ãã®ã«ã¹ã¿ã URLïŒã¿ãã®ããã²ãŒãïŒããµããŒãããããã«ãªããŸããã
// Original: https://github.com/angular/angular.js/issues/1699#issuecomment-22511464
//
// Usage:
//
// (interception is needed for Back/Forward buttons to work)
//
// location.intercept($scope._url_pattern, function(matched) {
// // can return false to abort interception
// var type = matched[1]
// if (!type) {
// return;
// }
// $scope.safeApply(function() {
// $scope.data_type = type;
// $scope.params.page = 1;
// $scope.get_data();
// });
// });
//
// anywhere in your controller:
// location.skipReload().path(url);
//
// to replace in history stack:
// location.skipReload().path(url).replace();
app.factory('location', [
'$location',
'$route',
'$rootScope',
function ($location, $route, $rootScope) {
var page_route = $route.current;
$location.skipReload = function () {
//var lastRoute = $route.current;
var unbind = $rootScope.$on('$locationChangeSuccess', function () {
$route.current = page_route;
unbind();
});
return $location;
};
if ($location.intercept) {
throw '$location.intercept is already defined';
}
$location.intercept = function(url_pattern, load_url) {
function parse_path() {
var match = $location.path().match(url_pattern)
if (match) {
match.shift();
return match;
}
}
var unbind = $rootScope.$on("$locationChangeSuccess", function() {
var matched = parse_path();
if (!matched || load_url(matched) === false) {
return unbind();
}
$route.current = page_route;
});
};
return $location;
}
]);
+1
+1
$ locationãã¹ãå€æŽãããšãã«ã«ãŒããåããŒããããªãããã«ããå¥ã®åé¿çã¯ãçŸåšã®ã«ãŒãpathParamsãæ°ãããã±ãŒã·ã§ã³ãã¹ãšäžèŽããããã«èšå®ããããšã§ãã
$ routeProvideræ§æã«ã¯ã次ã®ããã«/ tasksãžã®ã«ãŒãããããŸãã
when('/tasks/:section/:taskId?', {
templateUrl: 'partials/tasks.html',
controller: 'TaskCtrl',
reloadOnSearch: false
})
äžèšã®ã«ãŒãã«ã¯ã2ã€ã®pathParamsã»ã¯ã·ã§ã³ãštaskIdïŒtaskIdã¯ãªãã·ã§ã³ïŒããããreloadOnSearchã¯falseã«èšå®ãããŠããŸãã
ã«ãŒãããªããŒãããã«/ tasks / inboxãã/ tasks / inbox / 122ã«ç§»åããã«ã¯ã次ã®ããã«$ locationãã¹ãå€æŽããåã«taskIdpathParamãèšå®ããŸãã
$scope.showTask = function(task) {
// set taskId to prevent route reloading
$route.current.pathParams ['taskId'] = task.id;
$location.path('/tasks/'+$route.current.pathParams ['section']+'/'+task.id);
};
ã»ã¯ã·ã§ã³pathParamã¯ã«ãŒãã«ãã£ãŠãã§ã«èšå®ãããŠãããããèšå®ããå¿ èŠããªãããšã«æ³šæããŠãã ããã
æ°ãã$ locationãã¹ããæœåºãããpathParamsãçŸåšã®ã«ãŒãpathParamsãšäžèŽããããšãã«ãŒããæ€åºãããšïŒãããŠreloadOnSearchãfalseã«èšå®ãããŠããå ŽåïŒãã«ãŒãã¯ãªããŒããããã代ããã«$ routeUpdateã€ãã³ããçºçããŸãã
ã«ãŒãããªããŒãããã«/ tasks / inbox / 122ãã/ tasks / inboxã«æ»ãã«ã¯ã次ã®ããã«$ locationãã¹ãå€æŽããåã«ãtaskIdpathParamãåé€ããŸãã
$scope.back = function () {
// delete taskId to prevent route reloading
delete $route.current.pathParams ['taskId'];
$location.path('/tasks/'+$route.current.pathParams ['section']);
};
+1
+ïŒ100ïŒ
ããã¯ããŒã³ã«ãŒã¿ãŒã«é¢ããDerickBaileyã®èšäºhttp://lostechies.com/derickbailey/2011/08/28/dont-execute-a-backbone-js-route-handler-from-your-code/ãèªã¿ãŸãããïŒ ããã¯ããŒã³ã¯ãã®ãªãã·ã§ã³ãæäŸããDerickã«ããã°ããªããŒãã®ããªã¬ãŒãåžžã«åé¿ããå¿
èŠããããŸãïŒããã¯ãangularã®ã«ãŒã¿ãŒãããã§è¡ãããã«èŠããããšãšã¯éã®ããã§ãïŒã
ãã®æçš¿ã«ã¯48åã®ã+1ãããããŸã...ããããã¹ãŠã®äººãäœãééã£ãããšãããŠãããšã¯æããŸããã var lastRoute = $route.current;
ãä¿åããåŸã§$locationChangeSuccess
ã§$route.current = lastRoute;
ã䜿çšããŠåŸ©å
ããå¿
èŠãããã®ã¯ãããªãããããŒãªããã§ãã
@IgorMinaräœãèãã¯ãããŸããïŒ
OKç§ã¯æ¥é±ãã®ãããã¯ãææããŠããã®ã§ããããããããéããããšãã§ããŸãã
ãŸãæåã«ãïŒhashå€ãå€æŽããããšãã«ã«ãŒãããªããŒããããã¹ãã§ã¯ãªããšæããŸãã
website.com/#/my-route#top
website.com/#/my-route#bottom
ãããã£ãŠãtopãbottomã«å€æŽãããå ŽåããªããŒãããå¿ èŠã¯ãããŸããããmy-routeå€ãå€æŽãããå Žåã¯ããªããŒãããå¿ èŠããããŸãã ç§ãã¡ã¯çããã®æš©å©ã«åæã§ããŸããïŒ
次ã«ãããéèŠãªããšã§ãããã«ãŒããã¹ãå€æŽããããšãã«ãªããŒããããªãããšãç°¡åã«ææããæ¹æ³ãå¿
èŠã§ãããã«ãŒãã®ä»¥åã®ãã©ã°ã¡ã³ããå€æŽãããå Žåãããã¯åé¡ã«ãªããŸãã ã§ã¯ã2ã€ã®::
ã³ãã³ã䜿çšããŠãã«ãŒããã©ã¡ãŒã¿ã®è¡šèšãå€ããŠãã¯ã€ã«ãã«ãŒãå€ã®ããã«æ©èœããããšã瀺ããŠã¯ã©ãã§ããããã
// this will reload the page when the id changes like normal
$routeProvider.register('/users/:id')
// this will reload the page when the id changes, but not the section (since two colons are used)
$routeProvider.register('/users/:id/::section')
çããã¯ã©ãæããŸããïŒ
ããã¯ã移åãããç¶æ³ã§ã¯å®éã«ã¯åœ¹ã«ç«ã¡ãŸããã
/users/new
ã«
/users/123
æ°ãããŠãŒã¶ãŒãäœæãããIDãå²ãåœãŠããããšããŠãŒã¶ãŒã¯æ¢ã«ååšããããããŠãŒã¶ãŒããªããŒãããå¿ èŠã¯ãããŸããã
ã©ãããããããæ°ãããŠãŒã¶ãŒãªããžã§ã¯ããID 123ã®çŸåšã®ãŠãŒã¶ãŒãªããžã§ã¯ãã«ãããããå¿ èŠãããããã§ããããã¯ãã¢ããªã±ãŒã·ã§ã³åºæã§ã¯ãããŸãããïŒ
Ember Routerã¯ã移è¡ããã«URLãå€æŽããããšããµããŒãããŠããŸããã
http://stackoverflow.com/questions/19076834/change-url-without-transition
@matskoãšã³ãžãã¢ã«æš©éãäžããŠãã«ãŒããå€æŽãããªã¬ãŒãããã©ããããšã³ãžãã¢ã«æ±ºå®ãããããšã¯ã§ããŸããïŒ
ç§ã¯è¯ãããã©ã«ãã§å€§äžå€«ã§ãã
ãšã³ãžãã¢ããªããŒãã€ãã³ãã®ãã§ãŒã³å
šäœãå®è¡ããã«URLãå€æŽã§ããããã«ããæ¹æ³ãäœæããŸãã å人çã«ã¯ãããpathïŒïŒããããsearchïŒïŒããªã©ã«ãªãã·ã§ã³ïŒäŸïŒ{reloadïŒfalse}ïŒãå«ããªãã·ã§ã³ã®è¿œå ãã©ã¡ãŒã¿ãŒãè¿œå ããŠãåé¡ãããŸããã
@ChrisCinelliã¯ãããã ããã«ãŒãå®çŸ©ã«2ã€ã®
@matskoã§ã¯ãå®è£ ã®æåŸã«ãã©ã®ãã©ã¡ãŒã¿ãŒããªããŒããåŒãèµ·ãããã©ã®ãã©ã¡ãŒã¿ãŒããªããŒããåŒãèµ·ãããªãããéžæã§ãããšèããããŠããŸããïŒ ãããããªããããªãã¯ãã§ã«ã¢ãããŒããèããŠããŸããããããšãç§ãã¡ãåé¡ã«ã¶ã€ãã£ãŠãããšããã§ããïŒ
@ cgrosscherry-ã¯ããéžæããŸãïŒäºéã³ãã³ã䜿çšïŒã ããã¯ä»ã®ãšããåãªãã¢ã€ãã¢ãªã®ã§ãå ·äœçãªããšã¯äœããããŸããã ãããAngular2.0ã®èšç»ãšäžèŽããŠããå Žåã¯ãããã䜿çšãããã2.0ãèšç»ããŠãããã®ãŸãã¯Dartããã§ã«æã£ãŠãããã®ïŒAPIã®äžè²«æ§ãä¿ã€ããïŒã䜿çšããããšããããšãã§ããŸãã
ç§ã¯ãããå®ç§ã ãšæããŸãããããŠã«ãŒãã®äžéšãšããŠïŒå°ãªããšãIMOïŒèŠæ ããããã§ãããã
$routeProvider,when("/:categoryName/:id[reload=no]", { ... })
ãããŠãã³ã³ãããŒã©ãŒã§
$scope.$on("$routeChangeSuccess", function () {
if ($routeParams.id !== $scope.activeId) {
// React to ID update without reload
}
});
ã¯ãããã®ãããªãã®ã§ããã :id[reload=no]
代ããã«äºéã³ãã³ ':: id'ã䜿çšãããŸãã
ããã¯åãªãã¢ã€ãã¢ã§ãããããã®å€ãã®äººã ã¯ãã®æ©èœãæãã§ããããšãèŠããŠãããŠãã ããã
æçµçã«ã¯ä»ã®ãªãã·ã§ã³ãè¿œå ããããšãèããŠããŸããããä»ã«å¯èœãªãªãã·ã§ã³ã¯å®éã«ã¯ãªããšæããŸãã ãã®ãªã¯ãšã¹ããçå£ã«åãæ¢ããããŠããã®ãè¯ãããšã§ãã ããããªURLã¯ãç§ãã¡ã®å€ãã«ãšã£ãŠå€§ããªåé¡ã§ãã
äºéã³ãã³ã®å Žåã¯Matsko + 1ã§ãããäžèšã®ããã€ãã®ãšããžã±ãŒã¹ã«ã€ããŠããpathïŒïŒã«ãªãã·ã§ã³ãæž¡ãããšãã§ãããšäŸ¿å©ã ãšæããŸãã
ããã«ã³ãã³ã®å Žåã¯+1
@matskoããã æ€èšããããã«æ±ããããŸããã ng1.xã§ãããå¿ èŠãšããŠãã人ã«ã¯åœ¹ã«ç«ããªãããšã¯ç¥ã£ãŠããŸãããèå³æ·±ããããããªããšæããŸããã
æ°ããã«ãŒã¿ãŒã«ã¯navigate
ã¡ãœãããããããã®ã¡ãœããã«_url_ãªããžã§ã¯ããšãªãã·ã§ã³ã®_options_ãªããžã§ã¯ããæž¡ãããšãã§ããŸãã ããã¯2ã€ã®ãªãã·ã§ã³ããµããŒããããŠããŠããã¯ãããã¯ããŒã³ã«ãŒã¿ã®å±¥æŽæ©èœã«åºã¥ããŠããŸãreplace
ãštrigger
ããªããããã«è¡ãããå Žåã¯/users/new
ã«/users/123
ãªãç»é¢ããã²ãŒã·ã§ã³ãçºçãããã«ã¯ã trigger:false
æå®ããã ãã§ãã ãŸãã /users/new
å±¥æŽãšã³ããªãæ°ããIDããŒã¹ã®URLã«çœ®ãæãããå Žåã¯ã replace:true
ãæå®ããŸãã
DOMå€æãªã©ãè¡ããã«ã«ãŒãã_new_ã«ãŒããã_idããŒã¹_ã«ãŒãã«æŽæ°ããããšã¯ããã®APIã®äž»èŠãªãŠãŒã¹ã±ãŒã¹ã§ãã ãã1ã€ã®äžè¬çãªäŸã¯ãããŒãžä»ãã§ãã ããšãã°ãã°ãªãããããããŠãŒã¶ãŒã«ããŒã¿ãããŒãžã³ã°ããããå Žåã¯ãããã䜿çšããŠãããã²ãŒã·ã§ã³ãè¡ããã«ãã©ã°ã¡ã³ããçŸåšã®ããŒãžæ å ±ã§æŽæ°ã§ããŸãã ä»ã«ãçšéããããšæããŸãããããã¯ç§ãé·å¹Žã³ã³ãµã«ãã£ã³ã°ã§ç¹°ãè¿ãèŠããã®ã§ãã
ãã®æ å ±ãã圹ã«ç«ãŠã°å¹žãã§ãã ããããã1.xã«ãŒã¿ãŒã¯ãã®ææ³ãæ¡çšã§ããŸããïŒ
@EisenbergEffectãªã®ã§ç¢ºèªããŠãã ããã 1.xã®å Žåããã¹ãå€æŽããã«ãããè¡ãæ¹æ³ã¯æ¬¡ã®ããã«ãªããŸãã
$location.path(value, { trigger : false })
ãããŠãããã«ãããæ°ããã«ãŒã+ã³ã³ãããŒã©ãŒãèªèãããããšãªãããã¹ãå¹æçã«çœ®ãæããããŸãã ããã¯ä»ã®ãšããããŸããããããããŸããããããã«::
ã³ãã³ã®ã¢ã€ãã¢ã«ã€ããŠã©ãæããŸããïŒ
ããã«ããä»ã®ãã¹ãŠã®äººã«ãšã£ãŠãURLã®å€æŽïŒã«ãŒãããªããŒãããã«ïŒãã«ãŒããä»ããŠããŸãã¯URLãå€æŽããããšãã«éçºè ã容æã«ããããšããå§ãããŸããïŒ
ãµãŒãã¹ã®ããã«ãå Žæã®ä¿¡é Œã§ããå¯äžã®æ
å ±æºãå¿
èŠã§ãã
ã«ãŒããšãã©ãŠã¶ã¯ãåç
§ãšåœ±é¿ã®äž¡æ¹ãè¡ãããšãã§ããŸãããåäžã®ãŸãŸã§ã
çå®
2014幎7æ1æ¥ååŸ11æ28åããMatiasNiemelÀã [email protected]ã¯æ¬¡ã®ããã«æžããŠããŸãã
@EisenbergEffecthttps ïŒ//github.com/EisenbergEffectãã確èªããŠ
1.xããã¹ãå€æŽããã«ãããè¡ãæ¹æ³ã¯æ¬¡ã®ããã«ãªããŸãã$ location.pathïŒvalueã{triggerïŒfalse}ïŒ
ãããŠãããã¯æ°ããã«ãŒããåŒãèµ·ããããšãªããã¹ãå¹æçã«çœ®ãæããã§ããã
- æ°ä»ãã³ã³ãããŒã©ãŒã ããã¯ä»ã®ãšããããŸããããããããŸããããã©ãæããŸãã
ããã«::ã³ãã³ã®ã¢ã€ãã¢ã«ã€ããŠïŒããã«ããä»ã®ãã¹ãŠã®äººã«ãšã£ãŠãURLãå€æŽãããã§ããïŒ
ã«ãŒãã®ãªããŒãïŒã¯ãã«ãŒããä»ããŠããŸãã¯éçºè ã«ãã£ãŠä¿é²ãããŸã
URLãå€æŽããããšãïŒâ
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/angular/angular.js/issues/1699#issuecomment-47741350 ã
å¥ã®ã¢ã€ãã¢ããããŸã...åã«ãŒãå®çŸ©ã§2ã€ã®æ°ããã¡ãœãããããšãã°entering(transitionInfo)
ãšleaving(transitionInfo)
ãªã©ãèš±å¯ããŸãã ããããååšããå Žåã leaving
ã¡ãœããã¯åºçºããåã«å€ãã«ãŒãã§åŒã³åºããã次ã«entering()
ã¡ãœãããæ°ããã«ãŒãã§åŒã³åºãããŸãã transitionInfo
ã¯ã次ã®ãããªãªããžã§ã¯ãã«ãªããŸãã
{
newUrl: ...
newRoute: ...
oldUrl: ...
oldRoute: ...
cancelRouteChange: false,
ignoreRouteChange: false
}
ãã®æ¹æ³ã§ã¯ãæ°æ§ã®ã«ãŒã/ URLã確èªããURLãå€æŽããããã«ãŒãé·ç§»ãåå®è¡ããªãå Žåã¯ã ignoreRouteChange
ãtrue
ãŸãã ã«ãŒãå€æŽããã£ã³ã»ã«ããŠåã®ã«ãŒãã«ããŒã«ããã¯ããå Žåã¯ã cancelRouteChange
ãtrueã«èšå®ããŸãã
ããã«ãããéçºè ã¯ã«ãŒãé·ç§»ããã€çºçããããå®å šã«å¶åŸ¡ã§ããURLãã¢ãã¬ã¹ããŒã§çŽæ¥å€æŽãããå Žåã«æ©èœããå€æŽãæ°ã«ããåã ã®ã«ãŒãã®å®çŸ©ã«è¿ãç¹å®ã®ã«ãŒãå€æŽã決å®ããæ©èœãèŠã€ããããŸãã
activate()
ãšåŒã°ããAngularV2ã«ãŒã¿ãŒã«ã䌌ããããªãã®ããããšæããŸãã @EisenbergEffect確èªã§ããŸããïŒ
ã©ãæããŸããïŒ
@matskoã¯ãããã®APIã¯ãã®ããã«èŠããå¯èœæ§ããããŸãã replace
ãªãã·ã§ã³ã®å®è£
ãæ€èšããããšããå§ãããŸãããããé »ç¹ã«å¿
èŠã«ãªãããã§ãã ãã®ç¹å®ã®ã±ãŒã¹ã§ã¯/users/new
ã«/users/123
ããªããå®éã«ã¯ããããªãã®ã§ãç§ã¯äž¡æ¹ã®ãªãã·ã§ã³ã掻çšãããšæãã ãã/users/new
æ°ãããŠãŒã¶ãŒããããåŸãããã¯ã¹ã¿ãã¯ã«æ®ããŸãäœæããã
::
ã«é¢ããŠã¯ããããå®å
šã«åœ¹ç«ã€ãã©ããã¯ããããŸããã ãã®çç±ã¯ãäžèšã®ãŠãŒã¶ãŒã®äŸã§ã¯ãéèŠãªã®ã¯URLãã¿ãŒã³ã§ã¯ãªããç¹å®ã®ã¢ããªã±ãŒã·ã§ã³ã³ã³ããã¹ãã§ããããã§ãã ããšãã°ã customers
ããusers/123
移è¡ããå Žåã¯ãéç¥ããå¿
èŠããããŸãã ãŸãã users/new
ãæŸæ£ããŠusers/456
ã«ç§»åããå Žåããéç¥ããå¿
èŠããããŸãã users/new
ã«ããŠãæ°ãããŠãŒã¶ãŒã®äœæãå®äºããå Žåã«ã®ã¿ãé·ç§»ãçºçãããã«ãæ°ããäœæããããŠãŒã¶ãŒã®IDãè¡šãããã«ãã©ã°ã¡ã³ããæŽæ°ããã ãã§ãã ããã¯ããã®æç¹ã§ãã®ãŠãŒã¶ãŒç»é¢ã®ã³ã³ããã¹ãå
ã§ãŠãŒã¶ãŒãå®éã«äœãããŠãããã«å€§ããäŸåããŸãã
@petebacondarwinãã®ã¢ã€ãã¢ã®1ã€ã®åé¡ã¯ãã«ãŒãéç¥ã®èš±å¯ã«é¢ããç¥èããã«ãŒãå®çŸ©ãšãšãã«ã°ããŒãã«ã«å©çšã§ãããã®ã§ã¯ãªããšããããšã§ãã ããããç¹å®ã®ãŠãŒã¶ãŒã³ã³ãããŒã©ãŒã«åã蟌ãŸããŠããŸããããã¯ããã®ã³ã³ãããŒã©ãŒããæ°ãããŠãŒã¶ãŒç»é¢ããæ¢åã®ãŠãŒã¶ãŒã«ç§»åããã®ã§ã¯ãªããçŸæç¹ã§æ°ãããŠãŒã¶ãŒãå®éã«äœæãããŠãããã©ãããç¥ãã³ãŒãã®äžéšã§ããããã§ãã
ç§ã«ãšã£ãŠã®éã¯ãã«ãŒããå€æŽãããçºä¿¡è
ã«å¶åŸ¡ãäžããããšã§ãã ã ããç§ã¯ééããªã2ã€ã®ãªãã·ã§ã³replace
ãštrigger
ã«è³æã§ãã
@ EisenbergEffect-ãã®éãã§ãã äžè¬ã«ããã®æ å ±ã¯ããã«ã¯å©çšã§ããŸãããã次ã®ããã«å®è£ ããããšãæ³åããŸãã
currentUser
ãšãããµãŒãã¹ããããŸãããã®ãµãŒãã¹ã«ã¯ãçŸåšäœæ¥ããŠãããŠãŒã¶ãŒãå«ãŸããŠããŸãã ç§ã¯ã³ã³ãããŒã©ãŒãã³ãŒãã§ãªãŒããŒããŒãããããšã«æ £ããŠããªãã®ã§ããããäžè¬çã«è¡ãã®ã奜ãã§ãã ãããå ·äœçããããšæããå Žåã¯ãcurrentEntity
ã䜿çšã§ããŸããããã¯ãç·šé/衚瀺ããŠããçŸåšã®ããã®ãã§ãã次ã«ãã«ãŒã
enter()
ã¡ãœããã§ãããæ³šå ¥ãããã®ã«ãŒãã«ç§»åãããšçŸåšã®ãšã³ãã£ãã£ãå®éã«å€æŽããããã©ãããå€æã§ããŸãã ããã§ãªãå Žåã¯ããããããã©ã³ãžã·ã§ã³ãå®è¡ããå¿ èŠã¯ãããŸããã代ããã«URLãæŽæ°ããŠãã ããã
ããã¯å€§ããªã¢ããªã§ã¯å°ãæ±ãã«ââãããªãå¯èœæ§ãããããšãæè¬ããŠããŸããããªãã·ã§ã³ãšããŠããã«æšãŠããšæããŸããã
åŒã³åºãå ïŒã€ãŸããã«ãŒã/ URLã®å€æŽãèŠæ±ããåŒã³åºãå ïŒã«ãã«ãŒãé·ç§»ãå®éã«çºçãããã©ããã®å¶åŸ¡ãäžããããšã«å察ããè°è«ã¯äœã§ããïŒ @IgorMinarã¯ãããã«ãããã¢ããªã±ãŒã·ã§ã³ã®1ã€ã®ç¶æ ã1ã€ã®URLã«çŽæ¥ããããããã«ãŒããåå®è¡ããã«URLãå€æŽã§ããããã«ãããšãã¢ããªã±ãŒã·ã§ã³ãããªããããã«å°çããæ¹æ³ã
@petebacondarwinããã¯ãã®ç¹å®ã®ã·ããªãªã§ã¯æ©èœããå¯èœæ§ããããŸãããåè¿°ã®ããŒãžããŒã·ã§ã³ã®äŸãåŠçããã®ã¯å°ã
ç¶æ ã®åé¡ã«å¯ŸåŠããã«ã¯ãããå°ãè€éã§ãã ãã®çç±ã¯ãåãã³ã³ãããŒã©ãŒã®ç¶æ ãè¡šã2ã€ã®URLãããããã§ãããã ããéãã¯ã¢ãã«ã«ãããŸãã ãããã£ãŠãå®éã«ã¯2ã€ã®ç°ãªãç¶æ ããããŸããããããUXã®èŠ³ç¹ããã¯ã移è¡ãè¡ãéã«ãŠãŒã¶ãŒãé©ãããããããŸããã ããã©ãŒãã³ã¹ã®èŠ³ç¹ãããDOMãäžå¿ èŠã«ç Žæ£ããŠãã¹ãŠãåäœæããããšã¯æãã§ããŸããã ãããã£ãŠãæ°ãããŠãŒã¶ãŒ=>ä¿åããããŠãŒã¶ãŒé·ç§»ã®å Žåãããªã¬ãŒãåé¿ãããã©ã°ã¡ã³ãã眮ãæããŠãæ»ããã¿ã³ã§æ°ãããŠãŒã¶ãŒç»é¢ã«æ»ããªãããã«ããŸãã å éšçã«ã¯ãã«ãŒã¿ãŒãŸãã¯ãã±ãŒã·ã§ã³ã¡ã«ããºã ã¯ãçŸåšã®ãã©ã°ã¡ã³ããäœã§ãããã远跡ããå¿ èŠããããŸãã ïŒãã®ç¹ã§ng1.xãã©ã®ããã«æ©èœãããããããªããããããã§å°ãä»®å®ããŠããŸãã2.xã§ã¯ãå€æŽæ¹æ³ã«é¢ä¿ãªããçŸåš/åã®ãã©ã°ã¡ã³ãã泚ææ·±ã远跡ããããã«ããŠããŸããïŒããŒãžã³ã°ã·ããªãªã§ã¯ãããŒã¿ãããŒãžã³ã°ããããã®åªããUXãå¿ èŠã§ãããäžå¿ èŠãªDOMã®ç Žæ£ãå¿ èŠãªããããããªã¬ãŒããããããŸããã ãã ãããŠãŒã¶ãŒãæ»ããã¿ã³ã䜿çšããŠããŒã¿ã®ããŒãžãéæ¹åã«ç§»åã§ããããã«ãåã®ãã©ã°ã¡ã³ããä¿æããå¿ èŠããããŸãã
ã©ã¡ãã®å Žåããã¢ããªã®URLãšç¶æ ã ãã§ãªããçŸåšã®ç¶æ ããæ°ããç¶æ ã«ç§»è¡ããæ¹æ³ãéèŠã§ããããšã«æ³šæããŠãã ããã æ°ãããã¥ãŒã«çŽæ¥ãã£ãŒããªã³ã¯ããå Žåãããã¯éèŠã§ã¯ãããŸããã ãããã®éåžžã«ç¹æ®ãªã±ãŒã¹ã®ã³ã³ããã¹ãå ã§ãããå Žæããå¥ã®å Žæã«ç§»åããå Žåã¯éèŠã§ãã
+1
+1
+1
+1
ãŸããã«ãŒããå€æŽããã«URLãå€æŽããæ©èœããããŸã
+ 1-ç§ã ãããããæãã§ããªãã®ãèŠãŠããããã§ãïŒ
+1ããŸã è¿œå ããŠããŸããïŒ
+1
+1
+1
+1
+1
+1
+1
ïŒ+1ïŒ
ããªãã@basaratïŒ ïŒç¬é¡ïŒ
@johnnyreillyã«ã¯ã $route
ãš$location
ã泚å
¥ãããµãŒãã¹ãããã次ã®é¢æ°ã䜿çšã§ããŸãã
/** navigate */
public navigate(url: string, reload = true) {
this.$location.url(url);
// Don't do a controller reload on this navigation. Note: *you* need to be careful not to actually *need* a controller reload
if (!reload) {
var lastRoute = this.$route.current;
var unsub = this.$rootScope.$on('$locationChangeSuccess', () => {
this.$route.current = lastRoute; // fake this to make the route logic think nothing changed
unsub();
});
}
}
çŽ æµãª@basaratïŒ
+1
+1
çŸåšã®ãœãªã¥ãŒã·ã§ã³ã§æ°ä»ããŠããããšã®1ã€ã¯ãã«ãŒã¿ãŒè§£æ±ºãããã¯ããŸã å®è¡ãããŠããããšã§ãã ä»ã®èª°ããããã«æ°ã¥ããŸãããïŒ $ route.currentãªããžã§ã¯ãã«äœããæž¡ãã®ã¯ç°¡åã§ããããããã¯ããããŒã®ããã§ãã ãŸãããã®åé¡ã¯æ±ºããŠä¿®æ£ãããªãããã§ããïŒ ïŒæ³£ãïŒ
+1
+1
ã¹ã¯ããŒã«ããã¯ããå¿
èŠããªã人ã®ããã«...ç§ãç¥ãéããããã¯ç§ãã¡ããããŸã§ã«æã£ãŠãããã®ã§ãïŒç³ãèš³ãããŸãããã³ãŒããŒã¹ã¯ãªããïŒã æ®å¿µãªãããããã¯ç§ã«ãšã£ãŠ100ïŒ
æ©èœããŠããŸããã ãŸã resolve
å®è¡ãããŠãããæ»ã/é²ããã¿ã³ãå£ããŠããããã§ãã
#
# Special $location.path function that allows you to change the url, but not
# send things through the router.
# <strong i="7">@see</strong> https://github.com/angular/angular.js/issues/1699
#
@app.run(['$rootScope', '$location', '$route', '$timeout', ($rootScope, $location, $route, $timeout) ->
originalPath = $location.path
$location.path = (url, reload=true) ->
if ! reload
lastRoute = $route.current
if lastRoute
unsub = $rootScope.$on('$locationChangeSuccess', ->
$route.current = lastRoute # fake this to make the route logic think nothing changed
$route.current.ignore = true
unsub()
)
# make sure to clean up and unregister the unsub function
$timeout( ->
unsub()
, 500)
originalPath.apply($location, [url])
])
@lookfirstã¯ã unsub
2ååŒã³åºããŠããŸãã åªå
ïŒ https ïŒ
@basaratè©ããããã...ã奜ã¿ã®äŸã§unsubïŒïŒãåžžã«åŒã³åºãããŠãããšã¯éããªãããšãããã£ãã®ã§ããããè¿œå ããŸããã ãã¶ããunsubé¢æ°ã«ã¬ãŒããè¿œå ããã®ãæåã§ãããã
unsubbed = false
unsub = ... ->
if ! unsubbed
...
unsubbed = true
unsub()
$timeout(unsub, 500)
ãšã«ããããã®è§£æ±ºçã¯å®å šã«æ··ä¹±ããŠããŸãã ããã¯ããããçš®é¡ã®ãã®ãå£ããŸãã è§åºŠã®ããæ¿èªæžã¿ã®ä¿®æ£ãæ¬åœã«å¿ èŠã§ãã
unsubïŒïŒãããªãã®å¥œã¿ã®äŸã§åžžã«åŒã³åºãããŠããããã§ã¯ãªãããšãããã£ãããã§ã
@lookfirstããªãã¯location.path
ã䜿çšããŠããŸãç§ã¯location.url
ãŸãã ããã¯ããã«åœ±é¿ãäžããå¯èœæ§ããããŸãã
ãã ãã€ã¹ãã¹ïŒç§ã圹ã«ç«ã€ããšã奜ãïŒïŒä»£ããã«originalPath.apply($location, [url])
ããªããè¡ãããšãã§ããŸãoriginalPath.call($location, url)
ïŒããªãã¯ããããã§ã«ç¥ã£ãŠãããããããŸããïŒ
èå³æ·±ã... location.urlã®æ¹ãã¯ããã«ããŸãæ©èœããŸããïŒæ»ããã¿ã³ãåã³æ©èœããŸãïŒïŒãç§ã®åŽã§å¥ã®åé¡ãåŒãèµ·ãããŠããããã§ãã 10æéé£ç¶ã§ã³ãŒãã£ã³ã°ããŠããªãå Žåã¯ããããããã«æãäžããå¿ èŠããããŸãã ãã€ã³ã¿ãšãã£ã¹ã«ãã·ã§ã³ãæ¬åœã«ããããšãïŒ
+1
+1
+1
@kuchumovnããªãã®è§£æ±ºçã¯çŽ æŽãããã§ãã ç§ãåŸãåé¡ã®1ã€ã¯ããã¹ãå€æŽãããŠã$routeParams
ãå€æŽãããªãããšã§ãã ã€ãã³ããªã¹ããŒå
ã®$routeParams
ã®å€ã眮ãæããããšã§ãããã解決ããŸããã ãããæ£ããæ¹æ³ãã©ããã¯ããããŸããããç§ã«ãšã£ãŠã¯ããŸããããŸãã
app.factory('Location', [
'$location',
'$route',
'$rootScope',
'$routeParams',
function ($location, $route, $rootScope, $routeParams) {
var page_route = $route.current;
$location.skipReload = function () {
//var lastRoute = $route.current;
var unbind = $rootScope.$on('$locationChangeSuccess', function () {
angular.copy($route.current.params, $routeParams);
$route.current = page_route;
unbind();
});
return $location;
};
if ($location.intercept) {
throw '$location.intercept is already defined';
}
$location.intercept = function(url_pattern, load_url) {
function parse_path() {
var match = $location.path().match(url_pattern);
if (match) {
match.shift();
return match;
}
}
var unbind = $rootScope.$on("$locationChangeSuccess", function() {
var matched = parse_path();
if (!matched || load_url(matched) === false) {
return unbind();
}
angular.copy($route.current.params, $routeParams);
$route.current = page_route;
});
};
return $location;
}
]);
+1
+1
ç§ã¯æšæ¥@IgorMinarãšãŸãã...圌ã¯ãå°æ¥ã¯Angular 2.0ã®ã«ãŒã¿ãŒã§ããããŸããªã1.3ã«ç§»æ€ããããšèšã£ãŠããŸãã èæ ®ãã¹ãããš...
ãªãui-routerãAngularã«ããŒãžãããã®ã§ããïŒ
uuiã«ãŒã¿ãŒã¯ãå¿
èŠãªãã®ã¯äœã§ã解決ããŠããããã§ãã
@elennaroã«åæããŸãã ui-routerã¯ããããæ©èœãããããã«ããçšåºŠã®åµé æ§ãšç 究ãå¿ èŠãšããŸãããç§ãééãããã¹ãŠã®ã·ããªãªã§ãã®ããªãã¯ãå®è¡ããŸãã ui-routerãæ¡çšããããã«googleãªãœãŒã¹ãæå ¥ããããšã®æ¬ ç¹ã¯äœã§ããïŒ
解決çã®ã©ãã解決ãå®è¡ããªãããã§ããäœãã¢ã€ãã¢ã¯ãããŸããïŒ
+1
+1
$location.path(value, { trigger : false })
+1
ããã«ã€ããŠäœãé²å±ã¯ãããŸããïŒ
+1
+1
+1å®å šã«å¥ã®æ¹æ³ã¯ã©ãã§ããïŒ pathïŒïŒããã®ãŸãŸã«ããŠãã³ã³ãããŒã©ãŒããªããŒãããã«ãã©ãŠã¶ãŒã®URLãå€æŽããã ãã®$ location.hashã¡ãœãããè¿œå ããã ãã§ãã ããã«ããããã©ãŠã¶ã®ããã¯ããã²ãŒã·ã§ã³ãå¶åŸ¡ã§ãããªããã¢ããªã±ãŒã·ã§ã³ã§ã®æå¹ãªãŠãŒã¹ã±ãŒã¹ã·ããªãªã§ãã
+1
çŸåšããã®ããŒãžã§ã¹ããããã䜿çšããŠããŸãïŒ http ïŒ
+1
+1
+1
ç§ãèŠã€ããåé¿çã¯ã絶察URLã䜿çšããŠåç¶æ ãè¿œå ããããšã§ããã
$stateProvider.state('state.child', {
url: '^/some-other-url'
});
次ã«ã$ state.goïŒ 'ãchild'ïŒãå®è¡ããã ãã§ãURLããªããŒãããã«å¿ èŠãªãã®ã«å€æŽããå šå¡ãæºè¶³ãããããšãã§ããŸãã ãã£ã¬ããã¯ãURLã芪ããç¶æ¿ãããªãããšã瀺ããŠããããšã«æ³šæããŠãã ããããããç解ããã®ã«ãã°ããæéãããããŸããã
+1
+1
+1
+1
+1
+1
+1
@btford componentRouter
ããã¯ïŒããããã°ïŒã©ã®ããã«æ±ãããŸããïŒ
ã·ã³ãã«ã§å®çšçãªãœãªã¥ãŒã·ã§ã³ãæäŸã@balsaroriã«æè¬ããŸãã
ã³ã³ãããŒã©ããªããŒãããã«$route
ãã¹ãã©ã¡ãŒã¿ãæŽæ°ã§ããããã«ããã®äžã«è©³ãã説æãããŠããŸãã
uglifyjsã䜿çšããŠæ¬çªãã«ãã®ãã¹ãŠã®ãã°ãç°¡åã«åé€ã§ããããã $log
console.log
代ããã«$log
ã䜿çšããŸãã
ç·šéïŒãããžã§ã¯ãã§äœ¿çšããå Žåã®ä¿®æ£ïŒ
/**
* parameter handling
*/
'use strict';
angular.module('route-params', [
'ng',
'ngRoute',
])
.service('routeParams', function(
$route,
$location
) {
var R = {};
/**
* <strong i="15">@ngdoc</strong> method
* <strong i="16">@name</strong> routeParams#replace
*
* <strong i="17">@description</strong>
* Replace route params, including path params, without reloading controller.
*
* Causes `$route` service to update the current URL, replacing
* current route parameters with those specified in `params`.
*
* Provided property names that match the route's path segment
* definitions will be interpolated into the location's path, while
* remaining properties will be treated as query params.
*
* If `options.reload` is truthy, the current controller is reloaded.
*
* If `options.history` is truthy, the browser history is updated.
* If `options.history` is undefined, the browser history is only updated
* when changing value of any existing `$route` parameter,
* ie. not when adding a previously undefined `$route` parameter.
*
* <strong i="18">@param</strong> {!Object<string, string>} params mapping of URL parameter names to values
* <strong i="19">@param</strong> {!Object<string, boolean>} options `history` and `reload` options.
*
* <strong i="20">@returns</strong> {Object} self
*/
R.replace = function(params, options) {
var key, value, updateRequired;
options = options || {};
// Convert params to strings, and check if they differ from current route params.
// If `options.history` is undefined, and passed params update any current route params, then set it to true.
var currentParams = $route.current.params;
console.log('route: params: replace', {last: angular.copy(currentParams), next: params,
route: $route.current, options: options});
if (!$route.current.$$route) {
// Can't change location.
return;
}
var currentPath = $route.current.$$route.originalPath;
var history = options.history;
for (key in params) {
// jshint eqnull: true
value = params[key] = (params[key] == null ? undefined : params[key] + '');
if (value !== currentParams[key]) {
updateRequired = true;
console.log('route: params: replace: ' + (currentPath.search(':\\b' + key + '\\b') ? 'path.' : 'search.') +
key + ' = ' + (key in $route.current.params ? $route.current.params[key] + ' -> ' : '') + params[key]);
if (history === undefined && key in currentParams) {
console.log('route: params: replace: update history: ' + key + ' = ' + currentParams[key] + ' -> ' + value);
history = true;
}
}
}
if (updateRequired) {
// If `options.reload` is falsey, then set current route `reloadOnSearch` to false,
// and make passed path params equal with current route path params,
// so that `$route` treats the change as update only, and does not broadcast `$routeChangeStart` event.
//
// See https://github.com/angular/angular.js/issues/1699#issuecomment-45048054
// and https://github.com/angular/angular.js/tree/v1.3.x/src/ngRoute/route.js#L484
// and https://github.com/angular/angular.js/tree/v1.3.x/src/ngRoute/route.js#L539
if (!options.reload) {
// Set current route `reloadOnSearch` to false.
$route.current.$$route.reloadOnSearch = false;
// Add any passed path params to current route path params, and convert them to strings.
// Path params are detected by searching for respective name group `:key[*?]` in current route path.
for (key in params) {
if (currentPath.search(':\\b' + key + '\\b') !== -1) {
$route.current.pathParams[key] = params[key];
}
}
// Add any current route path params to passed params, if not set there already.
for (key in $route.current.pathParams) {
if (!(key in params)) {
params[key] = $route.current.pathParams[key];
}
}
// TODO: push state if `options.history` is truthy.
}
// If `options.history` is falsey, and controller is reloaded,
// then make `$location` replace current history state, instead of pushing a new one.
else if (!history) {
$location.replace();
}
$route.updateParams(params);
// Update current route params, so the change is reflected immediatelly,
// and nearby replace() call work correctly.
for (key in params) {
$route.current.params[key] = params[key];
}
}
return R;
};
return R;
});
ãã®åé¡ã®çŸåšã®ç¶æ³ã¯ã©ããªã£ãŠããŸããïŒ æ°ããã«ãŒã¿ãŒã§è§£æ±ºãããŸããïŒ 1.4ãªãªãŒã¹ã«éã«åããŸããïŒ ããã«ïŒ
åãåé¡ãçºçããŠããŸãããã¯ãšãªæååãã©ã¡ãŒã¿ã«åé¡ããããŸãã ããããå€æŽãããšãã«ãªããŒãããããããŸããã ãã ãããŠãŒã¶ãŒãã¯ãšãªæååãæåã§å€æŽãããã©ãããç¥ãå¿
èŠãããããã reloadOnSearch
ç¡å¹ã«ããããšã¯ã§ããŸããã :)
ããããšãïŒ
@marcalj fwiwãURLãã¢ãã¬ã¹ããŒãšåæãããŠãããµãŒãã¹ã§ãã®ãœãªã¥ãŒã·ã§ã³ããããã³ã°ãã reloadOnSearch
ãç¡å¹ã«ããŠã¯ãšãªãã©ã¡ãŒã¿ãååŸã§ããããã«ããŸããã ãŸãããŠãŒã¶ãŒã¯ããã¯ããŒã¯ãŸãã¯ãªã³ã¯ãä»ããŠURLãçŽæ¥ããã²ãŒãã§ããŸãã
ng-routerãŸãã¯ui-routerã䜿çšããŸããïŒ ã³ãŒããªã©ãžã®ãªã³ã¯ãæããŠããã ããŸããïŒ
ãã¶ãããã¯æ°ããã«ãŒã¿ãŒã䜿ã£ãŠè§£æ±ºã§ãããããããŸãããç§ã®ãããžã§ã¯ãã¯ãŸã çµãã£ãŠããªãã®ã§ç§ã¯ãããåŸ ã€ããšãã§ããŸãã
ããããšãïŒ
@marcaljãã®äŸã¯å°ãè€éã§ãããããæ代é ãã§ããã httpsïŒ//github.com/irthos/mngr/blob/master/app.jsãèŠãŠ10è¡ç®ã確èªããŠãã ãããapi.loadStateã¡ãœããã䜿çšããŠãé©åãªç¶æ ãæ§ç¯ããããã®URLã
NgSilentã¯ç§ã«ãšã£ãŠã®è§£æ±ºçã§ããã
https://github.com/garakh/ngSilentãèŠãŠ
ngRoute1.3.15ã§ãã¹ãæžã¿
@ sergey-buturlakinãš@kuchumovnã®äž¡æ¹ã®ãœãªã¥ãŒã·ã§ã³ã䜿çšããŸããããåãåé¡ãçºçãç¶ããŠããŸãã
åé¡ã®ããŒãžïŒpagexïŒã§location.skipReloadã䜿çšãããšãããŸãæ©èœããŸããã«ãŒããå€æŽããã«ããã¹ãäœåºŠãæŽæ°ã§ããŸãã 次ã«ãå®éã®$ location.pathã䜿çšããŠã«ãŒããpagexããæ°ããã³ã³ãããŒã©ãŒã«å€æŽãããšæ©èœããŸãããæ»ããã¿ã³ãæŒããŠpagexã«æ»ããå¥ã®ããŒãžã«ç§»åããããšãããšããã以äžã§ããªããªããŸãããã©ãŠã¶ãæŽæ°ããã«ã«ãŒããå€æŽããŸãã ãããåé¿ããæ¹æ³ã¯ãããŸããïŒ
+1
+1ã ããã£ã¢ã¹ãææ¡ããããã«ã³ãã³ã¢ãããŒãã奜ãã§ã
+1
ã·ã³ã°ã«ããŒãžã¢ããªããã¹å€æŽæã«ããŒãžããªããŒãããªãã®ã¯äžè¬çãªãŠãŒã¹ã±ãŒã¹ã§ãã
ãªãããããŸã Angularã«åã蟌ãŸããŠããªãã®ãéåžžã«å¥åŠã§ãã
@EvanWinstanleyãœãªã¥ãŒã·ã§ã³ã«åºã¥ããŠãã©ã°ã€ã³ãäœæã
https://github.com/anglibs/angular-location-update
1.5ã§ãããåæ€èšããŸãããã ïŒ5860ã«é¢é£ããPRããããŸã
ã«ãŒãã³ã³ãããŒã©ãŒãããªã¬ãŒããã«ã¯ãšãªæååãæŽæ°ããããã«åãé¢æ°ãå¿ èŠã§ãïŒ :)
次ã®ãããªãã®ïŒ $location.searchSilent('sf', SearchFilter.getForRouteParams());
$ location.pathïŒhrefïŒ;
scopeã$ applyïŒïŒ;
解決çã§ãïŒ
$ applyïŒïŒã䜿çšããŠå€æŽãè§åºŠä»ãããããã«éç¥ããå¿
èŠããããŸã
è§åºŠãéç¥ãããŠããªãã£ãããããã®ã¹ã¬ããã¯2幎ééãããŠããŸããããã¹ãŠãåŒã³åºããã«ãã«ãŒãã®äžéšãå€æŽããããšèããŠããŸãã
@petebacondarwinãªããŒããªãã§ãã±ãŒã·ã§ã³ãã¹ãæŽæ°ããã ãã§ãªãããªããŒããªãã§ãã¹ãŸãhttps://github.com/angular/angular.js/issues/1699#issuecomment -96126887
@jicasadaã®ãœãªã¥ãŒã·ã§ã³ã¯ç§ã«ãšã£ãŠå®å šã«ããŸã
@jicasadaããã¯ui-routerã§åäœããŸããïŒ èŠªãšåã®ç¶æ ãåãURLãå ±æããŠããå Žåãreloa dOnSearchïŒfalseãæ©èœããªã
+1
+1
ngSilentãå®ç§ã«æ©èœããŠããããšã確èªããŸããã ããã§ããå ¬åŒã®è§£æ±ºçãããã ããã°å¹žãã§ãã
解決çã¯ãåºæ¬çã«$ location.pathïŒïŒã«ãã©ã¡ãŒã¿ãŒãè¿œå ããããšã§ãã
app.run(['$route', '$rootScope', '$location', function ($route, $rootScope, $location) {
var original = $location.path;
$location.path = function (path, reload) {
if (reload === false) {
var lastRoute = $route.current;
var un = $rootScope.$on('$locationChangeSuccess', function () {
$route.current = lastRoute;
un();
});
}
return original.apply($location, [path]);
};
}]);
ãããŠããã®ããã«äœ¿çšããŸã
$location.path('/path/that/you/need', false);
$ location.replaceïŒ
ïŒããã³ïŒ+1
+1
次ã®ãããªãæ€çŽ¢ãã©ã¡ãŒã¿ãã䜿çšããããšããå§ãããŸãã
/thing?id=1234
ã«ãŒã¿ãŒãããã€ããŒã§ãã©ã¡ãŒã¿ãŒãæ§æããªãã§ãã ããããã¥ãŒãšã³ã³ãããŒã©ãŒããªããŒããããŸããã
IDãååŸãããå Žå$location.search().id //1234
@cgross
ãã¢http://codepen.io/dolymood/details/jrEQBx/
decorator
ã䜿çšããŠãã³ã¬ãŒã¿ngViewDirective
+1
+1
+1
+1
+1
+1
+ïŒ
ãã§ã«ååãª+1 :-)
ã¡ãã»ãŒãžãå±ããŸãã ã¯ãªã¹ãã¹ã®åã«ãããèŠãŠãããŸãïŒ
ïŒ15002ã§ééã
æãåèã«ãªãã³ã¡ã³ã
解決çã¯ãåºæ¬çã«$ location.pathïŒïŒã«ãã©ã¡ãŒã¿ãŒãè¿œå ããããšã§ãã
ãããŠããã®ããã«äœ¿çšããŸã