解决ng界面长表达式(ui-set)

本文来自网友sun shine的问题,问题如下:

您好, 我想求教一个问题.
    在$scope中我的对象名字写的特别深, 在 html中我又多次用到了同一个对象, 对不对在 html中让它绑定到一个临时变量呢?
    比如:
    $scope.this.is.a.very.deep.obj = {
    ‘name‘: ‘xxx‘,
    ‘state‘: ‘active‘};

    在 模板中,

    {{this.is.a.very.deep.obj.name}}
    {{this.is.a.very.deep.obj.state}}
    类似于这种, 我能否把 this.is.a.very.deep.obj 预先赋给一个临时的变量, 然后在 两个 span中只需 o.name, o.state 就行了呢? 我觉得这样解析起来是不是快一点.

    但是我试了, 并没有成功. 求指点.
    先谢了.

在这里首先需要说明的是ng界面的所有引用都需要在$scope这个viewmodel(ui和view的胶水层),所以如果我们希望能够把表达式变得更可读,更友好,那么我们就必须在$scope上创建这个变量。

再则对于ng其使用使用的一堆的$watch,实现脏检查,如果你理解这些了,那么我们就可以很容易的实现一套如spring的

<c:set var="xxx" expression="xxx" />

的tag.

对于实现这类tag,我们最好的方式则是利用ng的directive来实现,代码如下:

 angular.module("greengerong.ui.tag", [])
          .directive("uiSet", [
            function() {
              return {
                restrict: "EA",
                link: function(scope, elm, iAttrs) {
                  scope.$watch(iAttrs.expression, function(val) {
                    scope[iAttrs.
                      var] = val;
                    var apply = !scope.$$phase ? scope.$apply : angular.noop;
                    apply();
                  });
                }
              };
            }
          ]);

demo效果请移步jsbin demo;

时间: 2024-09-28 22:51:30

解决ng界面长表达式(ui-set)的相关文章

解决标题过长的CSS

不知道为什么大家用截取字符串的人很多呢.. <html> <head> <style type="text/css"> .divout { display: inline-block; white-space: nowrap; word-wrap: normal; width: 100%; overflow: hidden; -ms-text-overflow: ellipsis; -o-text-overflow: ellipsis; -webki

解决浏览器显示长数字不能自动换行或长字母不能换行的问题

原文:解决浏览器显示长数字不能自动换行或长字母不能换行的问题 首先看一下是什么问题: 例如: 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

解决Android界面布局添加EditText组件后界面无法预览

错误报告: Exception raised during rendering: java.lang.System.arraycopy([CI[CII)V Exception details are logged in Window > Show View > Error Log 问题分析: 进入xml源文件里发现一个警告,提示添加inputType或者hint元素,添加后界面仍然无法预览... 仔细查看了当前使用的API等级 API 20:Android 4.4w,这是Android官网发布

解决使用Touch ID API在回调时界面“长时间卡住”的问题

Touch ID是iOS8上新公开的API,关于详细介绍和用法可以看CocoaChina的这两篇文章:上 和 下,在此篇文章中不在赘述. 我在app中需要的效果是如果touch id验证通过,则页面push到下一个viewController,否则本视图的数字密码输入框becomeFirstResponder.研究过touch id的人应该知道,这段代码大概会这么实现: 1 LAContext *context = [[LAContext alloc] init]; 2 NSError *err

Android自定义控件系列 十:利用添加自定义布局来搞定触摸事件的分发,解决组合界面中特定控件响应特定方向的事件

这个例子是比较有用的,基本上可以说,写完这一次,以后很多情况下,直接拿过来addView一下,然后再addInterceptorView一下,就可以轻轻松松的达到组合界面中特定控件来响应特定方向的触摸事件了. 请尊重原创劳动成果,转载请注明出处:http://blog.csdn.net/cyp331203/article/details/45198549,非允许请勿用于商业或盈利用途,违者必究. 在写Android应用的过程之中,经常会遇到这样的情况:界面包含了多个控件,我们希望触摸在界面上的不

jQuery ui autocomplete 与easyUI冲突解决办法(重命名ui的autocomplete 和menu部分)

http://jqueryui.com/download/   UI定制只选autocomplete 会自动把依赖的menu模块也加入进来--然而easyUI也有自己的menu,于是就-- 折腾了好久摸索的解决方法-- UI的.menu替换成.mulu_kk; autocomplete中的menufocus替换成mulu_kkfocus; autocomplete中的menuselect替换成mulu_kkselect 折腾完就扔一边了,初步测试正常,如果您使用的时候发现有其他问题,请提醒下俺~

多线程、委托、Invoke解决winform界面卡死的问题,并带开关

一.知识点介绍 1,更新控件的内容,应该调用控件的Invoke方法. Invoke指: 在拥有控件的基础窗口句柄的线程上,用指定的参数列表执行指定委托.该方法接收一个委托类型和委托的参数,因此需要定义委托类型变量,然后传递给Invoke方法. 如果其他线程直接调用方法更新控件内容,报错:线程间操作无效: 从不是创建控件“richTextBox1”的线程访问它. 2,委托的本质是某一类型的方法,这些方法具有相同的参数和返回类型. 委托类似于C语言中的函数指针,可以指向多个相同类型的函数. 定义委托

Ubuntu 14.04解决登录界面无限循环的方法

在Ubuntu下配置Android的环境时,想像在Windows中那样在终端中直接启动adb,以为Linux和Windows一样,将adb的路径添加到环境变量中,于是将adb的路径也export到/etc/profile中,可杯具了,重启系统后,无限循环登录界面,经多方查找资料找到了解决办法. 办法如下: 1. 进入了登录界面后,不用输入密码,按住Ctrl+Alt+F1(听说F1-F6都行) 2. 进入了ubuntu的命令行界面,先输入用户名回车,然后输入密码回车(纯新手,不懂,习惯的直接密码了

我的Android最佳实践之—— 解决闪空界面问题

进入应用时,由于应用的启动Activity都会有默认的theme,所以会跳一下原始界面,才启动我们定义的theme. 修改这个问题的方法,就是给应用启动的Activity设置一个空的theme.如下面的例子: 联系人启动时的Activity为PeopleActivity ,我们就在manifest文件中设置PeopleActivity 的theme为一个空的theme <activity android:name=".activities.PeopleActivity" andr