angularjs源代码(angularjs简介)[20240424更新]
admin 发布:2024-04-24 12:05 124
本篇文章给大家谈谈angularjs源代码,以及angularjs简介对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、AngularJS的数据双向绑定是怎么实现的
- 2、如何只用AngularJs实现图片滑动切换?
- 3、如何看angularjs源代码
- 4、哪些JavaScript 框架的源代码最值得阅读和学习
- 5、angularjs有什么比较好用的datepicker
AngularJS的数据双向绑定是怎么实现的
AngularJS在$scope变量中使用脏值检查来实现了数据双向绑定。和Ember.js数据双向绑定中动态设施setter和getter不同,脏治检查允许AngularJS监视那些存在或者不存在的变量。
$scope.$watch
$scope.$watch( watchExp, listener, objectEquality );
为了监视一个变量的变化,你可以使用$scope.$watch函数。这个函数有三个参数,它指明了”要观察什么”(watchExp),”在变化时要发生什么”(listener),以及你要监视的是一个变量还是一个对象。当我们在检查一个参数时,我们可以忽略第三个参数。例如下面的例子:
$scope.name = 'Ryan';
$scope.$watch( function( ) {
return $scope.name;
}, function( newValue, oldValue ) {
console.log('$scope.name was updated!');
} );
1
2
3
4
5
6
7
8
代码laycode - v1.1
AngularJS将会在$scope中注册你的监视函数。你可以在控制台中输出$scope来查看$scope中的注册项目。
你可以在控制台中看到$scope.name已经发生了变化 – 这是因为$scope.name之前的值似乎undefined而现在我们将它赋值为Ryan!
对于$wach的第一个参数,你也可以使用一个字符串。这和提供一个函数完全一样。在AngularJS的源代码中可以看到,如果你使用了一个字符串,将会运行下面的代码:
if (typeof watchExp == 'string' get.constant) {
var originalFn = watcher.fn;
watcher.fn = function(newVal, oldVal, scope) {
originalFn.call(this, newVal, oldVal, scope);
arrayRemove(array, watcher);
};
}
1
2
3
4
5
6
7
8
代码laycode - v1.1
这将会把我们的watchExp设置为一个函数,它也自动返回作用域中我们已经制定了名字的变量。
$$watchers
$scope中的$$watchers变量保存着我们定义的所有的监视器。如果你在控制台中查看$$watchers,你会发现它是一个对象数组。
$$watchers = [
{
eq: false, // 表明我们是否需要检查对象级别的相等
fn: function( newValue, oldValue ) {}, // 这是我们提供的监听器函数
last: 'Ryan', // 变量的最新值
exp: function(){}, // 我们提供的watchExp函数
get: function(){} // Angular's编译后的watchExp函数
}
];
1
2
3
4
5
6
7
8
9
10
代码laycode - v1.1
$watch函数将会返回一个deregisterWatch函数。这意味着如果我们使用$scope.$watch对一个变量进行监视,我们也可以在以后通过调用某个函数来停止监视。
$scope.$apply
当一个控制器/指令/等等东西在AngularJS中运行时,AngularJS内部会运行一个叫做$scope.$apply的函数。这个$apply函数会接收一个函数作为参数并运行它,在这之后才会在rootScope上运行$digest函数。
AngularJS的$apply函数代码如下所示:
$apply: function(expr) {
try {
beginPhase('$apply');
return this.$eval(expr);
} catch (e) {
$exceptionHandler(e);
} finally {
clearPhase();
try {
$rootScope.$digest();
} catch (e) {
$exceptionHandler(e);
throw e;
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
代码laycode - v1.1
上面代码中的expr参数就是你在调用$scope.$apply()时传递的参数 – 但是大多数时候你可能都不会去使用$apply这个函数,要用的时候记得给它传递一个参数。
下面我们来看看ng-keydown是怎么来使用$scope.$apply的。为了注册这个指令,AngularJS会使用下面的代码。
var ngEventDirectives = {};
forEach(
'click dblclick mousedow n mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste'.split(' '),
function(name) {
var directiveName = directiveNormalize('ng-' + name);
ngEventDirectives[directiveName] = ['$parse', function($parse) {
return {
compile: function($element, attr) {
var fn = $parse(attr[directiveName]);
return function ngEventHandler(scope, element) {
element.on(lowercase(name), function(event) {
scope.$apply(function() {
fn(scope, {$event:event});
});
});
};
}
};
}];
}
);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
代码laycode - v1.1
上面的代码做的事情是循环了不同的类型的事件,这些事件在之后可能会被触发并创建一个叫做ng-[某个事件]的新指令。在指令的compile函数中,它在元素上注册了一个事件处理器,它和指令的名字一一对应。当事件被出发时,AngularJS就会运行scope.$apply函数,并让它运行一个函数。
只是单向数据绑定吗?
上面所说的ng-keydown只能够改变和元素值相关联的$scope中的值 – 这只是单项数据绑定。这也是这个指令叫做ng-keydown的原因,只有在keydown事件被触发时,能够给与我们一个新值。
但是我们想要的是双向数据绑定!
我们现在来看一看ng-model。当你在使用ng-model时,你可以使用双向数据绑定 – 这正是我们想要的。AngularJS使用$scope.$watch(视图到模型)以及$scope.$apply(模型到视图)来实现这个功能。
ng-model会把事件处理指令(例如keydown)绑定到我们运用的输入元素上 – 这就是$scope.$apply被调用的地方!而$scope.$watch是在指令的控制器中被调用的。你可以在下面代码中看到这一点:
$scope.$watch(function ngModelWatch() {
var value = ngModelGet($scope);
//如果作用域模型值和ngModel值没有同步
if (ctrl.$modelValue !== value) {
var formatters = ctrl.$formatters,
idx = formatters.length;
ctrl.$modelValue = value;
while(idx--) {
value = formatters[idx](value);
}
if (ctrl.$viewValue !== value) {
ctrl.$viewValue = value;
ctrl.$render();
}
}
return value;
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
代码laycode - v1.1
如果你在调用$scope.$watch时只为它传递了一个参数,无论作用域中的什么东西发生了变化,这个函数都会被调用。在ng-model中,这个函数被用来检查模型和视图有没有同步,如果没有同步,它将会使用新值来更新模型数据。这个函数会返回一个新值,当它在$digest函数中运行时,我们就会知道这个值是什么!
如何只用AngularJs实现图片滑动切换?
1. 下载ui-bootstrap.js程序 目前版本是0.11.0
2. 在HTML中引入script
script type='text/javascript' src='path/to/angular.min.js'/script
script src="path/to/ui-bootstrap.min.js"/script
script src="path/to/ui-bootstrap-tpls.min.js"/script
3. HTML示例代码如下:
!-- 轮播图 --
div
carousel interval="myInterval"
slide ng-repeat="slide in slides" active="slide.active"
img ng-src="{{slide.image}}" style="margin:auto;"
div class="carousel-caption"
p{{slide.text}}/p
/div
/slide
/carousel
/div
4. PostListController.js代码如下:
ftitAppModule.controller('PostListController',
function ($scope) {
// 设置轮播图图片间隔
$scope.myInterval = 5000;
// 轮播图数据初始化
var slides = $scope.slides = [];
// 添加轮播图源
slides.push({ image: '/Content/images/carousel_1.png', text: '亲爱的你,情人节快乐' });
slides.push({ image: '/Content/images/carousel_1.png', text: '亲爱的你,情人节快乐' });
});
如何看angularjs源代码
angular的源代码可以去官网下载,然后保存到本地查看。
工具原料:浏览器、编辑器
1、首先打开angular的官网下载angular的原文件,或者在其他的途径下载也是可以的。
2、然后点击download下载angular的原文件并保存到本地。
3、然后使用编辑器打开即可看到angular的源代码了。
哪些JavaScript 框架的源代码最值得阅读和学习
我觉得 jQuery 和 AngularJS 都太庞大了,要去阅读源代码实在是一个体力活。最好还是循序渐进,可以先看一下那些不是非常要命但也还可以偶尔装个逼的库,比如 underscore.js,比如 backbone.js 。这两个一个是库,一个是框架,注释写的比较完备,而且代码量少,适合一开始先积累一下成就感,然后再去看别的比较屌的
至于 jQuery 和 AngularJS ,我还是建议用到了再看,比如 jQuery 你可以用 jQuery source viewer ,对哪个函数感兴趣就看哪个函数。AngularJS 的话你不用那就别看了,看完了没多久就忘了;如果用的话可以先从一些 directive 和 resource 还有 http 部分看起.
angularjs有什么比较好用的datepicker
与标题一致,它是关于使用RequireJS和Bootstrap,绑定应用程序构建的基本思路、这是一个简单的日期控件组件、在AngularJS加载依赖、了解源代码、你应该了解对AngularJS、引入、HTML、CSS等基础知识
使用代码
源代码是一步一步来创建简单的页面、其中包含测试项目的代码、它包括函数库、AngularJS、引入、和我们的日期选择器控件、引导日期选择器libray的direcuve库
应用程序的基本流程:注射RequireJS index.html中加载main.js - app.js.在main.js、我加载指令和指标控制、去之前深深的索里的代码、我说明基本约在指令孤立的范围
在创建指令,AngularJS允许你创建一个孤立的范围,一些自定义绑定到父范围、有3种类型的结合被定义为在scope属性前缀的选项、前缀后面是HTML元素的属性名称、这些类型如下
文本装订(前缀:@),变量
单向绑定(前缀:&),功能
双向绑定(前缀:=), 值
第一个是我创造的指令与属性的类型。
define([´app´, ´directive/datepickerCtrl´], function (app) {
app.directive(´datepicker´, function () {
return {
restrict: ´A´,
controller: ´datepickerCtrl´,
controllerAs: ´dp´,
templateUrl: ´app/directive/datepicker.html´,
scope: {
´value´: ´=´
},
link: function (scope) {
}
};
});
});
在该指令,我注入datepicketCtrl处理的范围。您可以处理在控制器或直接联系范围变量的变化值:函数。
define([´app´], function (app) {
app.controller(´datepickerCtrl´, function ($scope) {
var self = this;
$(´.date´).datepicker({ autoclose: true, todayHighlight: true });
$scope.$watch(´value´, function (oldVal, newVal) {
console.log("Value: " $scope.value);
});
} );
});
在控制器,I初始化的日期选择器触发libary JavaScript的一些选项PARAMS
$(´.date´).datepicker({ autoclose: true, todayHighlight: true });
在该指令,我链接到日期选择器HTML模板。在模板我用NG-模型2路结合。我通过
从父控制器的变量命名为“价值”的指令。
div class="input-group date" data-date-format="dd-mm-yyyy"
input type="text" ng-class={inputError:dp.validDate==false}
class="form-control input-sm" ng-model="value" /
span class="input-group-addon"
span class="glyphicon glyphicon-th"/span/span
/div
我把输入级inputError检查输入日期自定义。您可以将其删除。
创建指令后,我用RequireJS在主文件加载
require(
[
´app´,
´directive/datepicker´,
´indexCtrl´
],
function (app) {
app.config([
.....
}
]);
angular.bootstrap(document, [´testApp´]);
});
并把它放在index.html文件
div ng-controller="indexCtrl"
div class="col-xs-2 value="birthday"
/div
angularjs源代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于angularjs简介、angularjs源代码的信息别忘了在本站进行查找喔。
版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;
相关推荐
- 05-06天猫源代码(天猫精灵源代码)[20240506更新]
- 05-06ios商城源代码下载(app源码商城)[20240506更新]
- 05-06便民工具源代码(工具网站源码)[20240506更新]
- 05-06javaweb个人博客登陆源代码(javaweb博客项目源码)[20240506更新]
- 05-06源代码高亮输出html(高亮显示代码)[20240506更新]
- 05-06dwz网站源代码(dw网站制作的源代码)[20240506更新]
- 05-05精美登录界面源代码模板(登录页面源代码)[20240505更新]
- 05-05小说源码里面的下载代码(小说 源代码)[20240505更新]
- 05-05手机斗地主源代码(斗地主源码下载)[20240505更新]
- 05-05股票分析源代码(股票分析软件源代码)[20240505更新]
取消回复欢迎 你 发表评论:
- 标签列表
- 最近发表
- 友情链接