Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在angularjs中启用html5模式时会发生什么?_Javascript_Angularjs_Html_Single Page Application_Html5mode - Fatal编程技术网

Javascript 在angularjs中启用html5模式时会发生什么?

Javascript 在angularjs中启用html5模式时会发生什么?,javascript,angularjs,html,single-page-application,html5mode,Javascript,Angularjs,Html,Single Page Application,Html5mode,当您启用html5模式时,实际会发生什么?这可能要追溯到单页应用程序中路由是如何发生的 我以前的感觉可能是错误的:在angularjs应用程序中查看脏url时,我总是假设它是url片段,不同的视图绑定到不同的片段。简而言之,我们已经有了所有的页面,并且为特定的url显示了一个特定的片段 现在,为了删除散列,您必须将html5mode设置为true,并且必须告诉服务器返回除API之外的每个请求的索引页。有点像 app.get('/ap1',some); //more apis * * * //i

当您启用html5模式时,实际会发生什么?这可能要追溯到单页应用程序中路由是如何发生的

我以前的感觉可能是错误的:在angularjs应用程序中查看脏url时,我总是假设它是url片段,不同的视图绑定到不同的片段。简而言之,我们已经有了所有的页面,并且为特定的url显示了一个特定的片段

现在,为了删除散列,您必须将html5mode设置为true,并且必须告诉服务器返回除API之外的每个请求的索引页。有点像

app.get('/ap1',some);
//more apis 
*
*
*
//in the end
app.get('*' ,(req,res,next) => req.sendFile('index.html'));
请求是否应该在每次url更改时转到服务器并重新加载页面

HTML5模式对浏览器有什么影响?在诸如react和angular2或更高版本的较新框架中,您甚至不需要启用HTML5Mode,除了angular2中,您需要告诉您想要什么样的url

这是什么魔法?

这是使用魔法

它的设计使开发人员能够:

告诉浏览器一些事情,比如我使用JavaScript更改页面内容。现在它与您请求/other/page时得到的页面相同 拦截向后和向前的点击,以便他们可以使用JS将页面内容更改为与未拦截向后/向前点击时导航到的URL相同。 这将更新浏览器历史记录和地址栏中的URL,而不会触发到新页面的正常导航。其思想是,如果您链接到页面或稍后再返回页面,您可以在页面之间提供更平滑、更快的转换,同时仍然具有工作良好的真实URL

这样:

如果JavaScript由于任何原因失败,真正的URL仍然可以交付页面 如果搜索引擎为URL编制索引,它将从中获取真实数据 如果访问者访问的URL不是主页,他们会立即获得所需的内容,而不必等待JavaScript运行,发出额外的Ajax请求,并在客户端组装所有内容。 它是为了响应人们使用而不是真实的URL而设计的

现在,为了删除散列,您必须将html5mode设置为true,并且必须告诉服务器返回除API之外的每个请求的索引页

这是来自Angular的可怕建议

它放弃了history API可以提供的所有好东西,以克服Hashbang的所有缺点,但使用了外观更好的URL

正确执行的问题是,它需要复制服务器和客户机上的逻辑,这是一项非常繁重的工作。是一种减少这种工作量的方法

HTML5模式对浏览器有什么影响

没什么。html5mode变量由Angular读取。浏览器并不直接关心它。它告诉Angular使用历史API而不是hangbang URL

在诸如react和angular2或更高版本的较新框架中,您甚至不需要启用HTML5Mode,除了angular2中,您需要告诉您想要什么样的url

默认情况下,它们只使用历史API。

这使用了

它的设计使开发人员能够:

告诉浏览器一些事情,比如我使用JavaScript更改页面内容。现在它与您请求/other/page时得到的页面相同 拦截向后和向前的点击,以便他们可以使用JS将页面内容更改为与未拦截向后/向前点击时导航到的URL相同。 这将更新浏览器历史记录和地址栏中的URL,而不会触发到新页面的正常导航。其思想是,如果您链接到页面或稍后再返回页面,您可以在页面之间提供更平滑、更快的转换,同时仍然具有工作良好的真实URL

这样:

如果JavaScript由于任何原因失败,真正的URL仍然可以交付页面 如果搜索引擎为URL编制索引,它将从中获取真实数据 如果访问者访问的URL不是主页,他们会立即获得所需的内容,而不必等待JavaScript运行,发出额外的Ajax请求,并在客户端组装所有内容。 它是为了响应人们使用而不是真实的URL而设计的

现在,为了删除散列,您必须将html5mode设置为true,并且必须告诉服务器返回除API之外的每个请求的索引页

这是来自Angular的可怕建议

它放弃了history API可以提供的所有好东西,以克服Hashbang的所有缺点,但使用了外观更好的URL

正确执行的问题是,它需要复制服务器和客户机上的逻辑,这是一项非常繁重的工作。是一种减少这种工作量的方法

HTML5D模式是什么 是否要转到浏览器

没什么。html5mode变量由Angular读取。浏览器并不直接关心它。它告诉Angular使用历史API而不是hangbang URL

在诸如react和angular2或更高版本的较新框架中,您甚至不需要启用HTML5Mode,除了angular2中,您需要告诉您想要什么样的url


默认情况下,他们只使用历史API。

非常感谢您提供如此详细的答案。不过我有疑问!它放弃了history API可以提供的所有好东西,以克服Hashbang的所有缺点,但使用了外观更好的URL。我看不透这一点@噩梦德维尔2010-我在上一节中列出了一些好东西,并给出了要点。如果每个URL都只提供索引页面,然后依靠JS在浏览器中重写,那么你就不会得到这些。非常感谢你提供了如此详细的答案。不过我有疑问!它放弃了history API可以提供的所有好东西,以克服Hashbang的所有缺点,但使用了外观更好的URL。我看不透这一点@噩梦德维尔2010-我在上一节中列出了一些好东西,并给出了要点。如果每个URL只传递索引页,然后依赖JS在浏览器中重写,那么就不会得到这些。