• Category Archives: 编程语言

JavaScript调用AngularJS的函数/$scope/变量

使用背景:

需要在其他JavaScript文件中调用AngularJS内部方法或改变$scope变量,同时还要保持双向数据绑定;

首先获取AngularJS application:

方法一:通过controller来获取app

var appElement = document.querySelector('[ng-controller=mainController]');

然后在获取$scope变量:

var $scope = angular.element(appElement).scope();

如果改变了其中的变量之后,需要在页面表现出来,还需要调用apply()方法:

$scope.$apply();

方法二:通过DOM操作获取app

//通过DOM操作获取app对象
var element = angular.element($document.getElementById("app"));
//得到app对象,可以获取app的controller
var controller = element.controller();
//得到app对象,可以获取app的$scope
var scope = element.scope();
//调用$scope中的方法
scope.sub1();
//调用方法后,可以重新绑定,在页面同步(可选)
scope.$apply();
//调用字段
scope.field1;

几个相关函数:

获取当前元素的$socpe:     angular.element(domElement).scope() to get the current scope for the element
获取当前app的injector:   angular.element(domElement).injector() to get the current app injector
获取当前元素的controller:angular.element(domElement).controller() to get a hold of the ng-controller instance.

参考文章:

http://segmentfault.com/a/1190000000747708

http://longqiang.name/2014/12/13/%E5%A4%96%E9%83%A8js%E8%B0%83%E7%94%A8angularjs%E5%86%85%E9%83%A8%E6%96%B9%E6%B3%95/

作者: ZH奶酪——张贺
Q Q: 1203456195
邮箱: cheesezh@163.com
出处: http://www.cnblogs.com/CheeseZH/
* 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

一个匹配数字和字母密码的正则表达式

一个用户注册功能的密码有如下要求:由数字和字母组成,并且要同时含有数字和字母,且长度要在8-16位之间。

如何分析需求?拆分!这就是软件设计的一般思路了。于是乎,拆分需求如下:
1,不能全部是数字
2,不能全部是字母
3,必须是数字或字母
只要能同时满足上面3个要求就可以了,写出来如下:

^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$

分开来注释一下:

^ 匹配一行的开头位置
(?![0-9]+$) 预测该位置后面不全是数字
(?![a-zA-Z]+$) 预测该位置后面不全是字母
[0-9A-Za-z] {8,16} 由8-16位数字或这字母组成
$ 匹配行结尾位置

注:(?!xxxx) 是正则表达式的负向零宽断言一种形式,标识预该位置后不是xxxx字符。

测试用例如下:

public class Test {
    public static void main(String[] args) throws Exception {
        String regex = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$";        
 
        String value = "aaa";  // 长度不够
        System.out.println(value.matches(regex));
 
        value = "1111aaaa1111aaaaa";  // 太长
        System.out.println(value.matches(regex));
 
        value = "111111111"; // 纯数字
        System.out.println(value.matches(regex));
 
        value = "aaaaaaaaa"; // 纯字母
        System.out.println(value.matches(regex));
 
        value = "####@@@@#"; // 特殊字符
        System.out.println(value.matches(regex));
 
        value = "1111aaaa";  // 数字字母组合
        System.out.println(value.matches(regex));
 
        value = "aaaa1111"; // 数字字母组合
        System.out.println(value.matches(regex));
 
        value = "aa1111aa";    // 数字字母组合
        System.out.println(value.matches(regex));
 
        value = "11aaaa11";    // 数字字母组合
        System.out.println(value.matches(regex));
 
        value = "aa11aa11"; // 数字字母组合
        System.out.println(value.matches(regex));
    }
}

 

AngularJS入门教程:日期格式化

  • 本地化日期格式化:
    1. ({{ today | date:’medium’ }})May 22, 2016 12:11:11 PM
    2. ({{ today | date:’short’ }})5/22/16 12:11 PM
    3. ({{ today | date:’fullDate’ }})Sunday, May 22, 2016
    4. ({{ today | date:’longDate’ }})May 22, 2016
    5. ({{ today | date:’mediumDate’ }})May 22, 2016
    6. ({{ today | date:’shortDate’ }})5/22/16
    7. ({{ today | date:’mediumTime’ }})12:11:11 PM
    8. ({{ today | date:’shortTime’ }})12:11 PM
  • 年份格式化:
    1. 四位年份:({{ today | date:’yyyy’ }})2016
    2. 两位年份:({{ today | date:’yy’ }})16
    3. 一位年份:({{ today | date:’y’ }})2016
  • 月份格式化:
    1. 英文月份:({{ today | date:’MMMM’ }})May
    2. 英文月份简写:({{ today | date:’MMM’ }})May
    3. 两位数字月份:({{ today | date:’MM’ }})05
    4. 一年中的第几个月份:({{ today | date:’M’ }})5
  • 日期格式化:
    1. 数字日期:({{ today | date:’dd’ }})22
    2. 一个月中的第几天:({{ today | date:’d’ }})22
    3. 英文星期:({{ today | date:’EEEE’ }})Sunday
    4. 英文星期简写:({{ today | date:’EEE’ }})Sun
  • 小时格式化:
    1. 24小时制数字小时:({{ today | date:’HH’ }})12
    2. 一天中的第几个小时:({{ today | date:’H’ }})12
    3. 12小时制数字小时:({{ today | date:’hh’ }})12
    4. 上午或下午的第几个小时:({{ today | date:’h’ }})12
  • 分钟格式化:
    1. 数字分钟数:({{ today | date:’mm’ }})11
    2. 一个小时中的第几分钟:({{ today | date:’m’ }})11
  • 秒数格式化:
    1. 数字秒数:({{ today | date:’ss’ }})11
    2. 一分钟中内的第几秒:({{ today | date:’s’ }})11
  • 毫秒数格式化:
    1. 毫秒数:({{ today | date:’sss’ }})403
  • 字符格式化:
    1. 上下午标识:({{ today | date:’a’ }})PM
    2. 四位时区标识:({{ today | date:’Z’ }})+0800
  • 自定义日期格式化:
    1. 年月日:({{ today | date:’yyyy-MM-dd’ }})2016-05-22
    2. 时分秒:({{ today | date:’HH:mm:ss.sss’ }})12:11:11.403

Swift类型之间转换

Int转换Float或Double:

let intVar : Int = 3
let doubleVar : Double = Double(intVar)

Int转换为String:

let intVar : Int = 3
let strVar : String = String(intVar)

 

String转换为Int:

let strVar : String = "123"
let intVar : Int? = strVar.toInt()

Double转换为String:

let doubleVar : Double = 3.14
let strVar : String = String(doubleVar)

Double保留两位小数,需要对Double进行扩展:

extension Double {
    func format(f: String) -> String {
        return NSString(format: "%\(f)f", self)
    }
}
let myDouble = 1.234567
println(myDouble.format(".2")

String转换Double:

let strVar : String = "3.14"
var string = NSString(string: strVar)
string.doubleValue

使用Storyboard进行简单的界面跳转并传递参数

使用storyboard结合代码来做确实可以给开发带来很多的便利。

在实践的过程中,我们经常会遇到界面的跳转问题。通过控件和界面的建立的“连接”就可以了。

如果是navigationcontroller的跳转,则选择push的方式(否则xcode运行的时候会报错);

如果是Viewcontroller的跳转,则选择modal的方式。

如果你想通过代码来打开另外一个界面,则需要设置他们之间连接的segue.identifier,比如你设置为jumpid。

 

然后代码就可以这么写:

self.performSegueWithIdentifier("jumpid", sender:self);

 

如果你还想在跳转的时候传递数值过去,你可以这么写:

override func prepareForSegue(segue:UIStoryboardSegue, sender: AnyObject?) {
        if(segue.identifier =="jumpid") {
            var barInfo:BarInfoViewController = segue.destinationViewControlleras! BarInfoViewController;
            barInfo.name ="david";
            barInfo.age =99;
        }
    }

 

通过正则表达式在中设置不包含的页面

比如写如下的配置文:
<filter-mapping>
<filter-name>AdminFilter</filter-name>
<url-pattern>/admin/*</url-pattern>
</filter-mapping>
那么admin目录下所有的文件都将在访问前被过滤器拦截,包括login.jsp。

我们可以自己在 Filter 里用正则表达式进行二次过滤,过滤的正则表达式可以通过:

<filter>
	<filter-name>LoginFilter</filter-name>
	<filter-class>com.test.LoginFilter</filter-class>
	<init-param>
		<param-name>UrlRegx</param-name>
		<param-value><!--你的正则表达式--></param-value>
	</init-param>
</filter>

 

close