有替代方法吗?
还有另一种方法可以在对象中进行更改检测吗?
有代理方法,但任何人都可以告诉我如何使用代理实现这一点:
var obj = {
foo: 0,
bar: 1
};
Object.observe(obj, function(changes) {
console.log(changes);
});
obj.baz = 2;
// [{name: 'baz', object: <obj>, type: 'add'}]
obj.foo = 'hello';
// [{name: 'foo', object: <obj>, type: 'update', oldValue: 0}]
Run Code Online (Sandbox Code Playgroud) 我在这里检查了其他帖子,没有找到我正在寻找的结果.我想点击
<a href="#about">About</a>
<div id="about">Content of this..</div>
Run Code Online (Sandbox Code Playgroud)
并将其滚动到该元素,而不将www.domain.com/#about放在地址栏中
作为一个完美的例子,请查看我在这里找到的这个网站并点击一些链接 - 点击时不要更改地址栏.
我想听听不是我维护的 SPA 中的路径变化。
我在这里找到了一个解决方案:https : //stackoverflow.com/a/44819548/7042552
但是,对我来说似乎有点“hacky” - 但我的实现仍然是这样的:
let url = window.location.href;
['click','popstate', 'onload'].forEach( evt =>
window.addEventListener(evt, function () {
requestAnimationFrame(()=>{
if (url !== location.href) {
// do stuff
}
url = location.href;
});
}, true)
);
Run Code Online (Sandbox Code Playgroud)
是否有更好或更通用的方法来监听 SPA 中的页面加载?
请注意,仅调用
history.pushState()
orhistory.replaceState()
不会触发popstate
事件。该popstate
事件将通过执行浏览器操作触发,例如单击后退或前进按钮(或调用history.back()
或history.forward()
在 JavaScript 中)。
我需要一种在 URL 更改时通过不触发popstate
事件的方式(例如history.replaceState()
)来执行某些代码的方法。最好使用 MutationObserver API [1],并且绝对不要每 x 秒轮询一次 URL。
此外,hashchange
不会这样做,因为我必须对URL 中的每个更改采取行动,而不仅仅是哈希部分。
那可能吗?
[1]在另一个问题上解释了为什么 MutationObserver API 对此不起作用。
(其他)相关问题: