使用Angular,如何通过我的应用程序或浏览器从URL栏或后退/前进按钮更新URL时,如何添加更新哈希时触发的监视?
答案 0 :(得分:25)
$scope.$watch
接受函数作为第一个参数,所以你可以这样做:
$scope.$watch(function () {
return location.hash
}, function (value) {
// do stuff
});
但我建议使用using events,例如$routeChangeSuccess
default router:
$scope.$on("$routeChangeSuccess", function () {})
对于ui-router ,或$stateChangeSuccess
$scope.$on("$stateChangeSuccess", function () {})
答案 1 :(得分:17)
$locationChangeSuccess可能会更好。
implicit val uploadContext: ExecutionContext = Akka.system.dispatchers.lookup("upload-context")
def upload = Action.async(parse.multipartFormData) { implicit request =>
request.body.file("picture").map { picture =>
val client = new AmazonS3Client
Future(client.putObject("my-bucket", picture.filename, picture.ref.file))(uploadContext)
}.getOrElse {
Future.successful(BadRequest("File missing"))
}
}
答案 2 :(得分:7)
如果没有使用角度$ watch,你也可以。 基本上,您观看'hashchange' windows事件。无论angularJS做什么都是这个的包装。例如,
$($window).bind('hashchange', function () {
// Do what you need to do here like... getting imageId from #
var currentImageId = $location.search().imageId;
});
答案 3 :(得分:1)
location.hash可以通过角度或内部由用户或浏览器进行内部更新(单击书签中的链接)。如果它在内部更新,则会运行$ scope。$ apply()。如果外部事件更新location.hash $ watch只会在下一个$ scope之后触发UNTIL。$ apply(),例如用户按下您应用中的按钮。
如果您希望使用$ watch,请向“hashchange”添加一个额外的事件侦听器以调用$ apply,或者将所有功能添加到本机DOM侦听器中,并且不要忘记调用$ apply(),因为这是一个外部电话。
window.addEventListener("hashchange", function(){ $scope.$apply(); }, false);
或......
window.addEventListener("hashchange", function(){ me._locationHashChanged(); $scope.$apply(); }, false);