有多种方法可以在AngularJS应用程序中实现模态,包括流行的Angular-Dialog服务和官方的Angular-UI Bootstrap模式。在本文中,我将分享我想使用另一项Angular-UI服务的Angular-ui-Router。
钥匙要点1。创建一个简单的html页
我们将首先创建一个index.html文件,其中包含以下内容:
2。创建您的Angular App
<span><span><!doctype html></span> </span><span><span><span><html</span> ng-app<span>="modalApp"</span>></span> </span> <span><span><span><head</span>></span> </span> <span><span><span><title</span>></span>Modals with Angular and Ui-Router<span><span></title</span>></span> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="css/app.css"</span> /></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/jquery.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular-ui-router.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/app.js"</span>></span><span><span></script</span>></span> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span></span>
>在我们打开模式之前,我们需要一个UI供用户与用户进行交互。在这种情况下
angular<span>.module("modalApp", ["ui.router"])</span>
<span><span><!doctype html></span> </span><span><span><span><html</span> ng-app<span>="modalApp"</span>></span> </span> <span><span><span><head</span>></span> </span> <span><span><span><title</span>></span>Modals with Angular and Ui-Router<span><span></title</span>></span> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="css/app.css"</span> /></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/jquery.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular-ui-router.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/app.js"</span>></span><span><span></script</span>></span> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span><h3</span>></span>Pusheen Hoodie<span><span></h3</span>></span> </span> <span><span><span><p</span>></span>Now you too can look like Pusheen!<span><span></p</span>></span> </span> <span><span><span><button</span>></span>Add to cart<span><span></button</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span></span>
5。定义UI视图指令,以使我们的模态加载到
>>由于我们将视图命名为“模态”,因此我们也需要将其传递给指令。 AutoScroll =“ false”设置可防止UI-Router尝试将模态滚动到视图中。
angular<span>.module("modalApp", ["ui.router"]).config(function($stateProvider) { </span> $stateProvider<span>.state("Modal", { </span> <span>views:{ </span> <span>"modal": { </span> <span>templateUrl: "modal.html" </span> <span>} </span> <span>}, </span> <span>abstract: true </span> <span>}); </span><span>});</span>
>让我们继续定义我们的第一个实际模态。我们将创建一个弹出窗口,询问用户是否确定他们要将产品添加到购物车中。
>由于ConfirmAdDtocart模态是模态状态的孩子,因此UI-Router将在模态状态模板(Modal.html)中寻找UI-View指令,以渲染确认模板。接下来,让我们创建这两个模板。
><span><span><!doctype html></span> </span><span><span><span><html</span> ng-app<span>="modalApp"</span>></span> </span> <span><span><span><head</span>></span> </span> <span><span><span><title</span>></span>Modals with Angular and Ui-Router<span><span></title</span>></span> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="css/app.css"</span> /></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/jquery.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular-ui-router.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/app.js"</span>></span><span><span></script</span>></span> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span><h3</span>></span>Pusheen Hoodie<span><span></h3</span>></span> </span> <span><span><span><p</span>></span>Now you too can look like Pusheen!<span><span></p</span>></span> </span> <span><span><span><button</span>></span>Add to cart<span><span></button</span>></span> </span> <span><span><span><div</span> ui-view<span>="modal"</span> autoscroll<span>="false"</span>></span><span><span></div</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span></span>
模态状态的模板负责创建透明的背景来覆盖该应用程序,以及各种各样的持有人,我们将加载不同的儿童状态模板。
这是属于CSS/app.css的几种基本样式:
此模板适用于带有确认消息的实际模态框。以下代码以模态/confirn.html:
angular<span>.module("modalApp", ["ui.router"]).config(function($stateProvider) { </span> $stateProvider<span>.state("Modal", { </span> <span>views:{ </span> <span>"modal": { </span> <span>templateUrl: "modal.html" </span> <span>} </span> <span>}, </span> <span>abstract: true </span> <span>}); </span> $stateProvider<span>.state("Modal.confirmAddToCart", { </span> <span>views:{ </span> <span>"modal": { </span> <span>templateUrl: "modals/confirm.html" </span> <span>} </span> <span>} </span> <span>}); </span><span>});</span>
样式:
<span><span><!doctype html></span> </span><span><span><span><html</span> ng-app<span>="modalApp"</span>></span> </span> <span><span><span><head</span>></span> </span> <span><span><span><title</span>></span>Modals with Angular and Ui-Router<span><span></title</span>></span> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="css/app.css"</span> /></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/jquery.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular-ui-router.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/app.js"</span>></span><span><span></script</span>></span> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span></span>
>现在我们拥有一个带有子状态的父态状态,并且它们的两个模板实际上要做的就是触发模态。 UI-Router为我们提供了一个名为UI-SREF的指令,其行为与锚标签的HREF属性相似。它从本质上将我们链接到我们提供的状态名称。
angular<span>.module("modalApp", ["ui.router"])</span>
>现在,当我们单击按钮时,路由器将导航我们到modal.confirmaddtocart状态。模态状态的模板将首先加载到index.html中的UI-View指令中。这将显示我们的背景并准备持有人。然后,“白色确认”对话框将加载到父模式模板中的UI-View指令中,嘿Presto!我们有模态!
我们设置的事件相当微不足道。我们只需要收听ESC键,以及背景上的任何点击即可。此外,已经添加了一个e.stoppropagation()调用,以防止在模态内咔嗒声到背景并无意中关闭模态。 11。过渡到另一个模态 >现在我们可以打开和关闭模态,我们可以开始看到这种方法的真正强度。使每种模态以一个状态表示,不仅干净有意义,而且使我们能够在这些模态内穿越状态。
由于模式只是状态,因此您获得了Angular UI路由器的所有其他添加好处,包括: >本文中的所有代码均可在GitHub上获得。我很想听听您对Angularjs中模态方法的反馈,所以请发表评论:)<span><span><!doctype html></span>
</span><span><span><span><html</span> ng-app<span>="modalApp"</span>></span>
</span> <span><span><span><head</span>></span>
</span> <span><span><span><title</span>></span>Modals with Angular and Ui-Router<span><span></title</span>></span>
</span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="css/app.css"</span> /></span>
</span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/jquery.min.js"</span>></span><span><span></script</span>></span>
</span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular.min.js"</span>></span><span><span></script</span>></span>
</span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular-ui-router.min.js"</span>></span><span><span></script</span>></span>
</span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/app.js"</span>></span><span><span></script</span>></span>
</span> <span><span><span></head</span>></span>
</span> <span><span><span><body</span>></span>
</span> <span><span><span><h3</span>></span>Pusheen Hoodie<span><span></h3</span>></span>
</span> <span><span><span><p</span>></span>Now you too can look like Pusheen!<span><span></p</span>></span>
</span> <span><span><span><button</span>></span>Add to cart<span><span></button</span>></span>
</span> <span><span><span></body</span>></span>
</span><span><span><span></html</span>></span></span>
>
angular<span>.module("modalApp", ["ui.router"]).config(function($stateProvider) {
</span> $stateProvider<span>.state("Modal", {
</span> <span>views:{
</span> <span>"modal": {
</span> <span>templateUrl: "modal.html"
</span> <span>}
</span> <span>},
</span> <span>abstract: true
</span> <span>});
</span><span>});</span>
<span><span><!doctype html></span>
</span><span><span><span><html</span> ng-app<span>="modalApp"</span>></span>
</span> <span><span><span><head</span>></span>
</span> <span><span><span><title</span>></span>Modals with Angular and Ui-Router<span><span></title</span>></span>
</span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="css/app.css"</span> /></span>
</span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/jquery.min.js"</span>></span><span><span></script</span>></span>
</span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular.min.js"</span>></span><span><span></script</span>></span>
</span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular-ui-router.min.js"</span>></span><span><span></script</span>></span>
</span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/app.js"</span>></span><span><span></script</span>></span>
</span> <span><span><span></head</span>></span>
</span> <span><span><span><body</span>></span>
</span> <span><span><span><h3</span>></span>Pusheen Hoodie<span><span></h3</span>></span>
</span> <span><span><span><p</span>></span>Now you too can look like Pusheen!<span><span></p</span>></span>
</span> <span><span><span><button</span>></span>Add to cart<span><span></button</span>></span>
</span>
<span><span><span><div</span> ui-view<span>="modal"</span> autoscroll<span>="false"</span>></span><span><span></div</span>></span>
</span> <span><span><span></body</span>></span>
</span><span><span><span></html</span>></span></span>
经常询问的问题(常见问题解答)关于使用AngularJ和Angular UI路由器创建状态模式
>如何使用AngularJ和Angular UI路由器创建一个状态模态?
>
我如何使用$ state Service打开模式? AngularJS中的国家服务使您可以在应用程序中的状态之间过渡。要打开模式,您可以使用$ state.go方法,以代表您模态的状态名称传递。这将导致AngularJS加载与该状态关联的模板并将其显示为模态。 AngularJS涉及在您的应用程序配置中使用$ stateProvider服务。您可以使用$ stateProvider.State方法定义一个新状态,传递指定状态名称,URL和模板或模板图的对象。模板或templateUrl应该指向模态的HTML内容。>我可以使用Angular UI路由器来创建模式而不维护状态吗?以关闭AngularJS中的状态模式,您可以使用$ State Service过渡到另一个状态。这将导致AngularJS卸载模式的模板并关闭模式。您还可以使用浏览器的返回按钮来关闭模态,如果您配置了模态以实现状态。
>>在Angularjs中创建状态模式时,我如何处理错误?可以使用$ statechangeerror事件来处理错误。当状态过渡期间发生错误时,该事件在根范围内广播。您可以在控制器中聆听此事件,并在发生时采取适当的操作。
>如何测试AngularJS中的状态模式?可以使用Angular的内置测试工具来完成AngularJ。您可以使用$状态服务过渡到模式状态,然后检查模态模板是否正确加载。您还可以使用Angular的$ Controller服务来测试模式控制器中的任何功能。
>以上是用Angular UI路由器在AngularJ中创建状态模式的详细内容。更多信息请关注PHP中文网其他相关文章!