angularjs 数据传递怎么传递this对象

自由、创新、研究、探索
Linux/Windows Mono/DotNet [ Open Source .NET Development/ 使用开源工具进行DotNet软件开发]锐意进取,志存高远.成就梦想,只争朝夕.从你开始,创新世界.【That I exist is a perpetual supprise which is life. Focus on eCommerce】
在讲angularjs的模块之前,我们先介绍一下angular的一些知识点:
AngularJS是纯客户端技术,完全用Javascript编写的。它使用的是网页开发的常规技术(HTML,CSS,Javascript),目的是让网页应用开发更快更容易。
AngularJS简化应用开发的一个重要方法是,将一个些通用的低级开发操作包装起来提供给开发者。AngularJS会自动处理好这些低级操作。它们包括:
设置事件的监听
输入验证,因为AngularJS会处理大部分这些操作,所以开发者就能更多的专注在应用的业务逻辑上,更少地编写那些重复性的、易错的、低级的代码。
在AngularJS简化开发的同时,它也为客户端带来了一些精巧的技术,它们包括:
数据、业务逻辑、视图的分离
数据和视图的自动绑定
依赖注入(主要用于聚合服务)
可扩展的HTML编译器(完全由JavaScript编写)
客户端对这些技术的需求其实已经存在很久了。
同时,你还可以用AngularJS来开发单页或者多页的应用,不过其主要还是用来开发单页的。 AngularJS支持浏览器的历史操作,向前,向后按钮,单页应用中的收藏操作。
接下来,我们来详细讲解angularJS的模块。
大部分应用都有一个主方法用来实例化、组织、启动应用。AngularJS应用没有主方法,而是使用模块来声明应用应该如何启动。这种方式有以下几个优点:
启动过程是声明式的,所以更容易懂。
在单元测试是不需要加载全部模块的,因此这种方式有助于写单元测试。
可以在特定情况的测试中增加额外的模块,这些模块能更改配置,能帮助进行端对端的测试。
第三方代码可以打包成可重用的模块。
模块可以以任何先后或者并行的顺序加载(因为模块的执行本身是延迟的)。
举个例子:
&!doctype html&
&html ng-app="myApp"&
&script src="http://code.angularjs.org/angular-1.0.2.min.js"&&/script&
var myAppModule = angular.module('myApp', []);
      // configure the module.
      // in this example we will create a greeting filter
      myAppModule.filter('greet', function() {
        return function(name) {
          return 'Hello, ' + name + '!';
        };
      });
{{ 'World' | greet }}
上面的例子,我们是通过在&html ng-app="myApp"&中进行指定,来实现使用myApp这个模块启动应用的。
以上这个例子写法很简单,但是不适合用同样的写法来写大型应用。我们推荐是将你的应用拆分成以下几个模块:
一个服务模块,用来做服务的声明。
一个指令模块,用来做指令的声明。
一个过滤器模块,用来做过滤器声明。
一个依赖以上模块的应用级模块,它包含初始化代码。
举个例子:
&!doctype html&
&html ng-app="xmpl"&
&script src="http://code.angularjs.org/angular-1.0.2.min.js"&&/script&
&script src="script.js"&&/script&
&div ng-controller="XmplController"&
{{ greeting }}!
script.js:
angular.module('xmpl.service', []).
//服务模块
value('greeter', {
//自定义greeter对象
salutation: 'Hello',
localize: function(localization) {
this.salutation = localization.
greet: function(name) {
return this.salutation + ' ' + name + '!';
value('user', {
//自定义user对象
load: function(name) {
this.name =
angular.module('xmpl.directive', []);
//指令模块
angular.module('xmpl.filter', []);
//过滤器模块
angular.module('xmpl', ['xmpl.service', 'xmpl.directive', 'xmpl.filter']).
//模块xmpl依赖于数组中的模块
run(function(greeter, user) {
// 初始化代码,应用启动时,会自动执行
greeter.localize({
salutation: 'Bonjour'
user.load('World');
// A Controller for your app
var XmplController = function($scope, greeter, user) {
$scope.greeting = greeter.greet(user.name);
这样拆分的原因是,在你的测试中常常需要忽略掉初始化代码,因为这些代码比较难测试。通过把它拆分出来就能在测试中方便地忽视掉它。通过只加载和当前测试相关的模块,也能使测试更专一。以上只是一个建议,你可以放心根据你的具体情况来调整。
一个模块就是一系列配置和代码块的集合,它们是在启动阶段就附加到应用上的。一个最简单的模块由两类代码块集合组成的:
配置代码块 - 在注入提供者注入和配置阶段执行。只有注入提供者和常量可以被注入到配置块中。这是为了防止服务在被配置好之前就被提前初始化。
运行代码块 - 在注入器被创建后执行,被用来启动应用的。只有实例和常量能被注入到运行块中。这是为了防止在运行后还出现对系统的配置。
代码实现:
angular.module('myModule', []).
  config(function(injectables) { // provider-injector
配置代码块
    // This is an example of config block.
    // You can have as many of these as you want.
    // You can only inject Providers (not instances)
    // into the config blocks.
  }). run(function(injectables) { // instance-injector
运行代码块
    // This is an example of a run block.
    // You can have as many of these as you want.
    // You can only inject instances (not Providers)
    // into the run blocks
模块还有一些配置的简便方法,使用它们的效果等同于使用代码块。举个例子:
angular.module('myModule', []).
value('a', 123).
factory('a', function() { return 123; }).
directive('directiveName', ...).
filter('filterName', ...);
// is same as
angular.module('myModule', []).
config(function($provide, $compileProvider, $filterProvider) {
$provide.value('a', 123)
$provide.factory('a', function() { return 123; })
$compileProvider.directive('directiveName', ...).
$filterProvider.register('filterName', ...);
配置块会按照$provide, $compileProvider, $filterProvider,注册的顺序,依次被应用。唯一的例外是对常量的定义,它们应该始终放在配置块的开始处。
运行块是AngularJS中最像主方法的东西。一个运行块就是一段用来启动应用的代码。它在所有服务都被配置和所有的注入器都被创建后执行。运行块通常包含了一些难以测试的代码,所以它们应该写在单独的模块里,这样在单元测试时就可以忽略它们了。
模块可以把其他模块列为它的依赖。&依赖某个模块&意味着需要把这个被依赖的模块在本块模块之前被加载。换句话说被依赖模块的配置块会在本模块配置块前被执行。运行块也是一样。任何一个模块都只能被加载一次,即使它被多个模块依赖。
模块是一种用来管理$injector配置的方法,和脚本的加载没有关系。现在网上已有很多控制模块加载的库,它们可以和AngularJS配合使用。因为在加载期间模块不做任何事情,所以它们可以以任意顺序或者并行方式加载
阅读(...) 评论()
随笔 - 14904
评论 - 1027angularjs怎么接收输入流对象_百度知道关于ng-click中this的指向问题?
html中:&a href=" " ng-click="like( this )"&Hello&/a&js中:在controller中定义了like方法
controller('myController',function ($scope){$scope.like=function(obj){obj.innerHTML="World"}
发现this并不是指向a的,试了下console.log(e.target) 结果为undefined,Angular新手请多多指教。
按时间排序
Angular 不推荐在 controller 里面直接操作 DOM ,应该通过 $scope 上面的变量结合 template 里面的表达式来修改 DOM 的,所以这种事件回调是拿不到 DOM 节点的。
angularjs规范里面【Style 】这里的function SomeController($scope, $log) {
var vm = this;
vm.title = 'Some Title';
$scope.$watch('vm.title', function(current, original) {
$log.info('vm.title was %s', original);
$log.info('vm.title is now %s', current);
对应显示层的&input ng-model="vm.title"/&这里开始并不像$scope显示title的数据,而是修改后才使用watch监听,这样的规范设定岂不是很麻烦有人解释一下问什么这样设定?
请删除这个答案。
this是指向当前的scope的比如你定义了一个&div ng-click="change()"&{{value}}&/div&
然后你想点击这个div的时候改变这个div的内容,那么在相应的controller中应该这样写:$scope.change = function(){
this.value = 'new value';
//等价于$scope.value = 'new value'
这种this的特性在ng-repeat中非常好用。比如你有一堆ng-repeat渲染出来的东西:&div ng-click="change()" ng-repeat="item in items"&{{item.value}}&/div&
然后你想给他们绑定一个统一的函数,点击之后只会把自己的值改变,此时this就是指向当前的子scope:$scope.change = function(){
this.item.value = 'new value';
//由于是ng-repeat出来的,所以这里this指向的scope是上面那个案例中$scope的子集。
//即this.$parent === $
已有帐号?
无法登录?
社交帐号登录Angularjs: passing an object params to state [用AngularJS:传递一个对象参数的状态] - 问题-字节技术
Angularjs: passing an object params to state
用AngularJS:传递一个对象参数的状态
问题 (Question)
I'd like to pass an object to a state. Here is how I did it:
.state('options', {
url: "/options?current_task",
"middle": {
templateUrl: "/games/options.html"
And here is how I call it:
$state.go("options", {current_task: task});
But instead of passing an object, it passed a String "Object Object"
What did I do wrong?
我想传递一个对象的状态。这里是我如何做:.state('options', {
url: "/options?current_task",
"middle": {
templateUrl: "/games/options.html"
我是这样称呼它:$state.go("options", {current_task: task});
但是,而不是传递一个对象,它通过一系列的“对象”我做错什么了?
最佳答案 (Best Answer)
The parameter you pass in the URL is always a string. You could pass multiple strings and combine them again to an object.
.state('options', {
url: "/options?current_task_1&current_task2",
"middle": {
templateUrl: "/games/options.html"
参数中传递URL始终是一个字符串。你可以把多个字符串,并将它们再到一个对象。.state('options', {
url: "/options?current_task_1&current_task2",
"middle": {
templateUrl: "/games/options.html"
本文翻译自StackoverFlow,英语好的童鞋可直接参考原文:}

我要回帖

更多关于 angularjs this 对象 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信