本文将分享在运行应用程序中的angularjs–Grails3.0静态html的详细内容,并且还将对在程序运行期间不会进行静态重定位进行详尽解释,此外,我们还将为大家带来关于.htaccess的Ang
本文将分享在运行应用程序中的angularjs – Grails 3.0静态html的详细内容,并且还将对在程序运行期间不会进行静态重定位进行详尽解释,此外,我们还将为大家带来关于.htaccess的AngularJS应用程序与HTML5模式的子文件夹、Angularjs localStorage存储cordova应用程序中的设置、angularjs – Angular JS单页应用程序中的神秘内存泄漏、angularjs – angular.bootstrap运行多个角度应用程序的相关知识,希望对你有所帮助。
本文目录一览:- 在运行应用程序中的angularjs – Grails 3.0静态html(在程序运行期间不会进行静态重定位)
- .htaccess的AngularJS应用程序与HTML5模式的子文件夹
- Angularjs localStorage存储cordova应用程序中的设置
- angularjs – Angular JS单页应用程序中的神秘内存泄漏
- angularjs – angular.bootstrap运行多个角度应用程序
在运行应用程序中的angularjs – Grails 3.0静态html(在程序运行期间不会进行静态重定位)
当我运行grails运行应用程序时,我只想提供html页面,包括它们链接的.css和.js(有角度和jQuery的内容).
我想检查我的http呼叫是否在双方正确使用 – 无需部署.war并配置数据库.
afaik grails run-app只是启动一个jetty / tomcat – 这两个都可以显着地提供.html页面.我需要做什么来使grails开发工具部署我的文件?
我需要发出http请求,
所以使用不同的服务器会违反JS-SOP,
而部署.war会大大减缓开发过程
我迄今为止只发现了笨重的jsonp,代理,.war部署解决方案或者解决方案
我尝试将文件放在项目的结构(/ src / main,/ src / main / resources,/ src / main / public,资产文件夹及其子文件夹)中,在每个子目录中创建了Web应用程序目录,Init,domain,conf目录 – 你命名)
然后将其添加到urlmappings.groovy中:
"/"(redirect:"/index.html")
对于grails> = 3.0.12
Location of static resources
In order to resolve an issue around how POST requests are treated for
REST applications on non-existent resources,static resources located
in src/main/resources/public are Now resolved under the /static/** URI
by default,instead of the base URI /**. If you wish to restore the
prevIoUs behavIoUr add the following configuration:grails.resources.pattern = ‘/**’
https://github.com/grails/grails-core/releases/tag/v3.0.12
.htaccess的AngularJS应用程序与HTML5模式的子文件夹
概述:
我有一个使用$locationProvider.html5Mode(true)的AngularJS应用程序,它是从Apache服务器提供的。 到目前为止,我使用源代码从其他人访问,我只需要redirect到index.html的angularJS的HTML5模式。 所以我有这个为我的/app文件夹的.htaccess文件。
.htaccess:
<IfModule mod_rewrite.c> RewriteEngine on # Don''t rewrite files or directories RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ - [L] # Rewrite everything else to index.html to allow html5 state links RewriteRule ^ index.html [L] </IfModule>
修改:
Apache .htaccess将index.htmlredirect到root,为什么要使用FollowSymlinks和RewriteBase?
.htaccess,将404错误重写到其他域
RewriteCond和RewriteRule在.htaccess中
使用.htaccess将所有非www都redirect到www和http
htaccess可以读取在Apache中设置的服务器环境variables吗?
然后,我添加了Grunt来缩小应用程序的/dist文件夹中生成的整个解决scheme(所以现在缩小的解决scheme在/ app / dist中)。 我现在想将我的应用程序的整个stream量路由到缩小版本,而不会让用户更改链接。 所以,在实践中,我想将每个来自/ app的调用redirect到/ app / dist。
目录结构现在:
app dist minified versions(css,html,js)
我尝试在/ app的.htaccess中使用这里的一些条件,并移动/ app / dist中的其他.htaccess文件,但没有成功。 我甚至不知道这两者是否可以这样结合。 我知道我可以使用dist文件夹作为/应用程序,但我不会真的想这样做,因为/ app是一个回购,它更容易保持更新。 那么我怎样才能实现这个redirect呢?
此外,作为第二件事情,是否有可能把一个标志不知何故,我让阿尔法用户使用正常(未缩小)的版本更好的debugging?
更新:
我在这里添加了一个示例项目。 我只保留了上面显示的初始.htaccess文件,您可以检查两个版本( /test和/test/dist )是否如上所述工作。 此外,它可能有一些未使用的代码和依赖项,但我只是从我的项目中删除其他部分(不要判断:D)。
为此,我使用了AngularJS 1.4.8的初始configuration,可能会产生一些像这里和这里所述的错误。 随意将AngularJS版本更新到1.5.8(Angular 1的最后一个稳定版本),但同时考虑到Cosmin Ababei的post上的评论。 另外,该项目使用npm来安装grunt(以及其他的grunt扩展),bower for angular和其他一些基本组件,以及用于构build缩小版本的grunt(实际上,它现在只是将资源连接在相同的文件中)。 如果您需要更改依赖项,请不要忘记运行bower install 。 如果你想重新生成dist文件夹,不要忘记运行npm install和grunt build 。
apache HTTP:X-Forwarded-Proto in .htaccess在开发环境中导致redirect循环
用.htaccess中选定的查询string参数重写URL
漂亮的URL与.htaccess
apache .htaccess到Nginx重写规则
.htaccessurl重写和删除%20
我将假定在/dist目录里有index.html ,并且更新的URL指向缩小的资源和正确的<base>标记。 请注意, <base>标记必须指向/dist文件夹 – 只需将/dist附加到您为未压缩的 index.html使用的值,您就可以。
有了这些东西,这里是更新的.htaccess文件:
RewriteEngine On # Don''t rewrite files RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^ - [L] # If the ALPHA_USER cookie is set,serve the uncompressed files RewriteCond %{HTTP_COOKIE} ALPHA_USER [NC] RewriteRule ^ index.html [L] # Rewrite everything RewriteRule ^ dist/index.html [L]
你会注意到两件事情:
我已经删除了RewriteCond %{REQUEST_FILENAME} -d因为很可能你不需要为整个目录服务
我添加了ALPHA_USER cookie,将用户重定向到未压缩的文件。 这个cookie可以有你想要的任何价值。
在public_html => / app => .htaccess里面试试这个:
RewriteEngine On RewriteCond %{HTTP_HOST} ^example.com$ [NC] RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ dist/index.html [L]
注意: HTML <base>标签应该指向dist文件夹。 我希望这个解决方案能按照你的期望工作。
总结
以上是小编为你收集整理的.htaccess的AngularJS应用程序与HTML5模式的子文件夹全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
Angularjs localStorage存储cordova应用程序中的设置
关于这个的任何教程?我找不到任何:(
知道Cordova支持; LocalStorage,Websql(no more maintained),IndexedDB(Opera和Safari的not widely supported).我倾向于使用LocalStorage,但是即使在我重启设备后它仍保留/记住数据?
目前我正在使用答案#12969480 by Richard Szalay.
LocalStorage不是永久存储,而Websql似乎对存储设置有点过分.
您不必过多参与Objective-C并且有很好的Phonegap / Cordova插件指南:
http://docs.phonegap.com/en/3.3.0/guide_hybrid_plugins_index.md.html#Plugin%20Development%20Guide
我使用此代码存储“FirstRun”变量来检查应用程序是否是新安装.插件检查应用程序之前是否已运行,并返回1或0,将其解析为整数并计算为true / false.
您可以更新此代码并向“AppChecks”类添加更多方法.我把所有简单的检查和设置存储放在这个类中.
AppChecks.h
#import <Cordova/CDVPlugin.h> @interface AppChecks : CDVPlugin - (void) checkFirstRun:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options; @end
AppChecks.m
#import "AppChecks.h" #import <Cordova/CDVPluginResult.h> @implementation AppChecks - (void) checkFirstRun:(NSMutableArray *)arguments withDict:(NSMutableDictionary *)options { Nsstring* callbackId = [arguments objectAtIndex:0]; CDVPluginResult* pluginResult = nil; Nsstring* javaScript = nil; @try { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; Nsstring *isFirstRun = @"1"; if (![defaults objectForKey:@"firstRun"]) { [defaults setobject:[NSDate date] forKey:@"firstRun"]; } else { isFirstRun = @"0"; } pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsstring:isFirstRun]; javaScript = [pluginResult toSuccessCallbackString:callbackId]; } @catch (NSException* exception) { // Could not get locale pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_JSON_EXCEPTION messageAsstring:[exception reason]]; javaScript = [pluginResult toErrorCallbackString:callbackId]; } [self writeJavascript:javaScript]; } @end
在我的Javascript代码中使用:
cordova.exec( function( isFirstRun ) { isFirstRun = parseInt( isFirstRun ); if( isFirstRun ) { // do stuff for first run } },function(err) { // handle error from plugin },"AppChecks","checkFirstRun",[] );
angularjs – Angular JS单页应用程序中的神秘内存泄漏
我们有一个使用Angular JS构建的单页面应用程序.我们在HTML5模式下使用$routeProvider来实现SPA路由.功能明智 – 一切都很棒!
我们有一个连接到body元素的全局控制器,标题中有一个控制器用于快速搜索功能,所有其他控制器都作用于路径.控制器之间共享一些数据,如currentUser对象和包含用户所选语言的字符串值的ViewRes对象.
但是,我们注意到Chrome服务为我们的页面占用了太多内存.我使用Chrome Profiles工具查看发生了什么.我禁用了大多数使用复杂指令的代码,只省略了基础知识.内存消耗降低了很多,但显然仍然存在.每当我更改页面时,内存都会增加.
在堆快照中,它显示大多数内存由(闭包)和(数组)占用.分离的DOM树也很大.请注意,这些快照包含我们应用程序的基本元素(页眉,页脚和轻量级内容).如果我包含我们复杂的UI组件,那么内存从14MB跳到50MB到140MB ……等等.显然我们会照顾这些指令,但我担心我们的问题是全局性的,而不仅仅是对指令的错误设计.
当我打开(数组)元素时,我注意到它们中有一堆具有浅的大小和保留的大小6172.跟踪该对象的范围总是导致一些ng指令,如ngShow,ngIf …
从图像中可以看出,树在’cache in function()’中结束.我们使用Angular 1.3.6.
编辑:这个项目还包括jQuery.我们使用的是jQuery 1.8.2,当我切换到1.11.2时,在简单页面(简单的ng-repeats和简单模型)之间切换不再导致内存泄漏(不再有分离的DOM元素).
现在复杂的指令仍然给了我太多的分离元素,所以我现在要处理那些,当我找到原因时我会在这里发布结果.
解决方法
$interval特别令人讨厌,因为它会继续运行,直到你关闭浏览器或网页 – 即使用户移动到不同的选项卡或应用程序,它也不会停止运行!
如果在这些闭包中创建对DOM元素的引用,您很快就会开始咀嚼内存,因为从不会释放引用,并且当用户从一个页面移动到另一个页面时,DOM树会分离.
要解决此问题,请确保在控制器(以及指令的控制器或链接函数)中处理$destroy事件,并在使用任何间隔,监视或事件处理程序后明确清理.
您可以通过保持对每个$interval,watch或事件处理程序的引用并在$destroy事件处理程序中将其作为函数调用来完成此操作.
例如:
// eventListener to remove var eventListener = $scope.$on('eventName',function(){…}); // remove the eventListener when the $destroy event is fired $scope.$on('$destroy',function(){ // call the value returned from $scope.$on as a function to remove // the event listener eventListener(); } // remove an event listener defined on a DOM node: var elementEventListener = element.on('eventName',function(){…}); element.on('$destroy',function(){ elementEventListener(); } // Stop an interval var stop = $interval(function(){...}); $scope.$on('$destroy',function(){ stop(); } // Finally,unbind a $watch var watchFn = $scope.$watch('someValue',function(newVal){…} $scope.on('$destroy',function(){ watchFn(); }
最后,永远不要在范围内存储DOM元素! (参见#2 here点的原因).
angularjs – angular.bootstrap运行多个角度应用程序
我有一个用例需要加载单独的角度应用程序.
根据几个堆栈溢出问题和this google thread,它是可行的.但是,我无法让它发挥作用.
看文档:
http://docs.angularjs.org/api/angular.bootstrap
看起来你需要提供元素(如何获取元素的句柄?),然后如何将它与配置,控制器等联系起来.这对路由有何影响?似乎一个应用程序使用否则另一个使用否则,第二个将覆盖第一个?
谢谢!
var first = document.getElementById('firstapp-id'); var second = document.getElementById('secondapp-id'); angular.bootstrap(angular.element(first),['firstapp']); angular.bootstrap(angular.element(second),['secondapp']);
其中’firstapp’和’secondapp’是模块/应用程序名称,’firstapp-id’和’secondapp-id’是每个应用程序(或您最喜欢的DOM元素)的容器div的id.只需以通常的方式定义您的应用:
var firstapp = angular.module('firstapp',[]); var secondapp = angular.module('secondapp',[]);
今天关于在运行应用程序中的angularjs – Grails 3.0静态html和在程序运行期间不会进行静态重定位的分享就到这里,希望大家有所收获,若想了解更多关于.htaccess的AngularJS应用程序与HTML5模式的子文件夹、Angularjs localStorage存储cordova应用程序中的设置、angularjs – Angular JS单页应用程序中的神秘内存泄漏、angularjs – angular.bootstrap运行多个角度应用程序等相关知识,可以在本站进行查询。
本文标签: