是否可以通过浏览器中的历史记录返回按钮检测用户是否输入了页面?我最好想用angular.js检测这个动作.
我不想使用角度路由.如果用户提交表单并在成功提交到服务器并重新定向之后,它也应该有效,如果用户使用浏览器的后退按钮返回到表单,也应该可以.
我有一个范围变量$ scope.first_unread_id,它在我的控制器中定义.在我的模板中,我有:
<div id="items" >
<ul class="standard-list">
<li ng-repeat="item in items" scroll-to-id="first_unread_id">
<span class="content">{{ item.content }}</span>
</li>
</ul>
</div>
Run Code Online (Sandbox Code Playgroud)
我的指令看起来像:
angular.module('ScrollToId', []).
directive('scrollToId', function () {
return function (scope, element, attributes) {
var id = scope.$parent[attributes["scrollToId"]];
if (id === scope.item.id) {
setTimeout(function () {
window.scrollTo(0, element[0].offsetTop - 100)
}, 20);
}
}
});
Run Code Online (Sandbox Code Playgroud)
然而,它有两个问题:
是否有更好的方法可以将"first_unread_id"从控制器范围中移除到直接询问范围内.$ parent?这似乎有点'icky'.我希望我可以通过视图将其传递给直接作为参数,而不必在ever li元素上重复该参数.
有没有更好的方法来避免需要setTimeout()调用?没有它,它有时会起作用- 我想是由于布局时间的不同.我理解我使用的语法是定义一个链接函数 - 但我不清楚默认情况下这是一个前置链接还是后置链接 - 如果这对我的问题也很重要.