Angular.js指令

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处理阶段页面闪烁的问题。

时间: 2024-10-29 05:18:51

Angular.js指令的相关文章

angular js 指令的数据传递 及作用域数据绑定

<div my-directive my-url="http://google.com" my-link-text="Click me to go to Google"></div> angular.module('myApp', []) .directive('myDirective', function() { return { restrict: 'A', replace: true, scope: { myUrl: '@', //绑定

Angular JS (指令 directive)

一,指令的创建 /*--Js code--*/var app = angular.module("superhero",[]);app.directive("superman",function(){return { restrict: "E", template: "<div> Here I am to save the day </div>"}}) /*--HTML code--*/<div

angular js 指令

AngularJS 指令是扩展的 HTML 属性,带有前缀 ng-. ng-app 指令初始化一个 AngularJS 应用程序. ng-init 指令初始化应用程序数据. ng-model 指令把元素值(比如输入域的值)绑定到应用程序. 实例   ({{ firstName }} 是通过 ng-model="firstName" 进行同步.) <div ng-app="" ng-init="firstName='John'"> &l

Angular.js中的指令——易懂全解析

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">angular.js中,指令是最基础的

推荐 15 个 Angular.js 应用扩展指令(参考应用)

几天前我们看到Angular 1.4.0发布了-一个以社团为驱动的发布版本涵盖了400多个GitHub的提交,增加了对特性的提升,比如动画,以及可用性. 官方新闻发布稿 覆盖了绝大部分,这同样值得放于 官方版本库 中. Angular.js   是一个神奇的JS框架,这一点毫无疑问,但是尽管受欢迎度和社团日益增长,但是社团中的很多开发者觉得Angular是另外一种浪费个人时间和效率的形式.在这些最不招人喜欢的问题中你会发现,测试和调试简直就是一个噩梦.你可以从网络上找到一些分散的报告, 这里有一

Angular JS 中 指令详解

Angular JS的强大功能就在于其可以自定义很多指令,现在就指令做一下详细的剖析. 一个Angular js 指令(directive)的生命周期 开始于$compile方法 结束于$link方法. angular.module('myApp', []) .directive('myDirective', function() { return { restrict: String, priority: Number, terminal: Boolean, template: String

angular js中的directive

angular js中的自定义指令 自定义指令return如下指令定义对象: restrict:restrict约束自定义指令的使用形式,取值有A(属性),E(元素),C(类),M(注释) template:该属性指定angular js指令被替换为html模板 scope:scope:true 表示创建一个作用域,该作用域继承于父作用域(即ng-controller控制的作用域), scope:{} 创建一个完全孤立的作用域,不会继承父作用域的任何数据 scope:{"@"} 创建一

Angular JS从入门基础 mvc三层架构 常用指令

Angular JS从入门基础  mvc模型 常用指令 ★ 最近一直在复习AngularJS,它是一款优秀的前端JS框架,已经被用于Google的多款产品当中.AngularJS有着诸多特性,最为核心的是:MVC.模块化.自动化双向数据绑定.语义化标签.依赖注入等等. 1.常用指令 AngularJS 通过指令扩展了HTML,且通过表达式绑定数据到 HTML.下面我们看一下AngularJS中的常用指令. (1).基本概念 指令:AngularJS中,通过扩展HTML的属性提供功能.所以,ng-

angular.fullpage.js指令的使用方法(详解)

接之前,jquery.fullpage在angular单页应用中存在重复初始化,分页器加倍问题,索性直接找到了angular.fullpage.js全屏滚动指令应用 angular-fullpage文档这里(将的不仔细自己做有点麻烦,不过有个demo) demo的却也不好看,直接上代码详解 1.首先得引用文件(当然angular.js必须的,省略) 2.导入angular.module内(fullPage.js放入,其他可以忽略自己用到的) 3. angular单页路由配置 state中加入(c