写点什么

​ AngularJS 进阶 (七)AngularJS 实现根据不同条件显示不同控件

  • 2022-12-01
    上海
  • 本文字数:2541 字

    阅读完需:约 8 分钟

​  AngularJS进阶(七)AngularJS实现根据不同条件显示不同控件

由于项目需求,需要实现根据不同条件显示不同控件的功能。具体要求如下图所示:

 


当选择“每单固定减”时,下方只显示“减免金额”一栏;

    当选择“每单固定折扣”时,下方只显示“折扣比例”一栏;

  当选择“每单满额减”时,下方只显示“满..减..”两栏。

根据自己对 angular 的了解,应该可以很轻松的实现此功能。


js 设置控件的隐藏与显示,设置控件 style 的 display 和 visibility 属性就可以了。


用 JavaScript 隐藏控件的方法有两种,分别是通过设置控件的 style 的“display”和“visibility”属性。


style.display="block"style.visibility="visible"时控件可见,当style.display="none"style.visibility="hidden"时控件不可见。不同的是“display”不但隐藏控件,而且被隐藏的控件不再占用显示时占用的位置,而“visibility”隐藏的控件仅仅是将控件设置成不可见了,控件仍然占俱原来的位置。

执行结果截图如下:

 

部分源码如下:

function displayHideUI()
{
var ui =document.getElementById("bbs");
ui.style.display="none";
}
function displayShowUI()
{
var ui =document.getElementById("bbs");
ui.style.display="";//display为空的话会好使,为block会使后边的空间换行
}
function visibilityHideUI()
{
var ui =document.getElementById("bbs");
ui.style.visibility="hidden";
}
function visibilityShowUI()
{
var ui =document.getElementById("bbs");
ui.style.visibility="visible";
}
</script>
复制代码

值 描述

  • none 此元素不会被显示。

  • block 此元素将显示为块级元素,此元素前后会带有换行符。

  • inline 默认。此元素会被显示为内联元素,元素前后没有换行符。

  • inline-block 行内块元素。(CSS2.1 新增的值)

  • list-item 此元素会作为列表显示。

  • run-in 此元素会根据上下文作为块级元素或内联元素显示。

  • compact CSS 中有值 compact,不过由于缺乏广泛支持,已经从 CSS2.1 中删除。

  • marker CSS 中有值 marker,不过由于缺乏广泛支持,已经从 CSS2.1 中删除。

  • table 此元素会作为块级表格来显示(类似<table>),表格前后带有换行符。

  • inline-table 此元素会作为内联表格来显示(类似<table>),表格前后没有换行符。

  • table-row-group 此元素会作为一个或多个行的分组来显示(类似<tbody>)。

  • table-header-group 此元素会作为一个或多个行的分组来显示(类似<thead>)。

  • table-footer-group 此元素会作为一个或多个行的分组来显示(类似<tfoot>)。

  • table-row 此元素会作为一个表格行显示(类似<tr>)。

  • table-column-group 此元素会作为一个或多个列的分组来显示(类似<colgroup>)。

  • table-column 此元素会作为一个单元格列显示(类似<col>)

  • table-cell 此元素会作为一个表格单元格显示(类似<td>和<th>)

  • table-caption 此元素会作为一个表格标题显示(类似<caption>)

  • inherit 规定应该从父元素继承 display 属性的值。

AngularJS 路由问题解决

遇到了一个棘手的问题:点击优惠详情时总是跳转到药店详情页面中去。再加一层地址解决了,但是后来发现问题还是来了:

Could not resolve 'yhDtlMaintain/yhdetail' from state 'yhMaintain'

药店详情          http://192.168.1.118:8088/lmapp/index.html#/0

优惠券详情      http://192.168.1.118:8088/lmapp/index.html#/0

优惠活动详情  http://192.168.1.118:8088/lmapp/index.html#/index/0

经过 url 的对比,自己发现了问题。其中药店详情和优惠券详情的 url 是相同的。而之前自己在优惠活动详情中改动了一下,结果正常显示。然后自己接着查看优惠活动的修改地方,发现:

/*--------------------------优惠活动详情维护--------------------------*/
   .state('yhhdDtlMaintain', {
       url: '/index/{yhid}',
       views: { //注意这里的写法,当一个页面上带有多个ui-view的时候如何进行命名和视图模板的加载动作
            '': {
               templateUrl: 'rightInfoList.html'
               },
            'sys_banner@yhhdDtlMaintain': {
               templateUrl: 'sys_banner.html'
               },
             'rightContent@yhhdDtlMaintain': {
               templateUrl: function($stateParams){
               console.log("YHID:");
               console.log($stateParams);
               return 'yh_set_dtl.html';
                } 
              }
           }
    }) 
复制代码

玄机藏在 url 中,其实这个 url 是在浏览器中访问的 url,基于用户浏览该应用所在的状态。同理,自己修改了优惠券详情的路由,如下:

/*-----------------------------优惠券详情维护-----------------------------*/
  .state('yhqDtlMaintain', {
     url: '/yhqIndex/{yhid}',
     views: { //注意这里的写法,当一个页面上带有多个ui-view的时候如何进行命名和视图模板的加载动作
         '': {
             templateUrl: 'rightInfoList.html'
             },
         'sys_banner@yhqDtlMaintain': {
              templateUrl: 'sys_banner.html'
             },
         'rightContent@yhqDtlMaintain': {
              templateUrl: function($stateParams){
              console.log("YHQID:");
              console.log($stateParams);
              return 'yh_set_dtl.html';
              } 
           }
        }
 })  
复制代码

这样所有的问题就迎刃而解了。但自己还是需要深入理解一下相关原理。若之前不做修改的话,优惠券详情的 url 就会与药店详情相同,药店详情页面覆盖了优惠券详情页面。


发布于: 2022-12-01阅读数: 23
用户头像

No Silver Bullet 2021-07-09 加入

岂曰无衣 与子同袍

评论

发布
暂无评论
​  AngularJS进阶(七)AngularJS实现根据不同条件显示不同控件_AngularJS_No Silver Bullet_InfoQ写作社区