码迷,mamicode.com
首页 > Web开发 > 详细

Angular.js指令

时间:2015-10-08 00:25:20      阅读:452      评论:0      收藏:0      [点我收藏+]

标签:

ng-style


 

 
<input type="button" value="set color" ng-click="myStyle={color:‘red‘}">
<input type="button" value="set background" ng-click="myStyle={‘background-color‘:‘blue‘, color: ‘black‘}">
<span ng-style="myStyle">Sample Text</span>

ps:ng-style指定的表达式必须是个单层的json对象,key和value对应css属性的名称和值。注意如果css属性名中有“-”连接符,需要用引号括起来。

工作原理:

ng-style代码比较简单,调用jquery.css方法,将上次设置的css属性移除(why?),添加新的css属性。

ngstyle的核心代码:

  scope.$watch(attr.ngStyle, function ngStyleWatchAction(newStyles, oldStyles) {
    if (oldStyles && (newStyles !== oldStyles)) {
      forEach(oldStyles, function(val, style) { element.css(style, ‘‘);});
    }
    if (newStyles) element.css(newStyles);
  }, true);

遗留问题:

ng-style代码比较简单,所以就带来了一些问题。ng-style监听的表达式变更的时候,把上次设置的style给清除,却没有恢复上次设置前的值,所以就有可能会把之前的style值给清除掉。

技术分享
1 <body ng-app="" class="ng-scope">
2      <input type="button" value="变更字体颜色" ng-click="myStyle={color:‘red‘}">
3    <input type="button" value="变更背景颜色" ng-click="myStyle={‘background-color‘:‘blue‘}">
4    <input type="button" value="clear" ng-click="myStyle={}">
5    <br>
6    <span ng-style="myStyle" style="color: yellow;">Sample Text</span>
7    <pre class="ng-binding">myStyle={}</pre>
8 
9 </body>

上述代码,“Sample Text”显示成黄色,点击“变更字体颜色”以及“变更背景颜色”后,猜猜“Sample Text”字体是什么颜色?
黄色应该是比较合理的颜色吧?红色也说得过去,毕竟最后一次没改么! 然而,事实上是系统默认色(黑色),因为被抹杀了 :(

不理解源代码出于什么考虑,按我理解,应该按照下面两个方案之一来实现:

  1. 初始化时,备份用户自定义style。监视表达式,变化,恢复用户自定义style,然后再用新定义的style覆盖。上例中,字体颜色应该为黄色。
  2. 不做抹杀处理,直接进行style覆盖。

回避方案,表达式中css 属性清单始终保持一致。

有人可能会问为啥用了ng-style还要用style属性?  

答:ng-style设置是为了减少页面初始化后到angularjs处理阶段页面闪烁的问题。

Angular.js指令

标签:

原文地址:http://www.cnblogs.com/zjy0616/p/4859851.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!