angularJS のいくつかの使用法

小云云
リリース: 2017-12-12 10:33:50
オリジナル
1309 人が閲覧しました

AngularJS は、多くの Google 製品で使用されている優れたフロントエンド JS フレームワークです。 AngularJS には多くの機能があり、その最も核となる機能は、MVC、モジュール化、自動双方向データ バインディング、セマンティック タグ、依存関係注入などです。この記事では、angularJS の使用法に関する関連情報を中心に紹介します。必要な方は参考にしていただければ幸いです。

AngularJS

イベントコマンド:

ng-click/dblclick
ng-mousedown/up
ng-mouseenter/leave
ng-mousemove/over/out
ng-keydown/up/press
ng-focus/blur
ng-submit
ログイン後にコピー

ng-clickと同様に、イベントをdomにバインドします

イベントオブジェクトを使用する場合、そうする必要がありますng-click などの命令で $event を渡します。例:

<button ng-click="clickFn($event)" class="btn btn-danger">aa</button>
ログイン後にコピー

フォームコマンド

ng-change
ログイン後にコピー

値が変更されたときに役立ちます

には値がありますng-modelで使用できる場合にのみ使用します

ng-modelで使用する必要があります

データ検証を行うことができます

ng-disabled 控制元素是否可用
ng-readonly
ng-checked
ログイン後にコピー

チェックボックスが選択されているかどうかを制御します

設定のみこれは、データを通じて選択するかどうかのみを制御できます

それを通してデータを制御するにはng-modelを設定します

disabledとreadonlyの違い

Form要素は、disabledまたはreadonly属性を設定することで設定できます。無効に設定すると、ユーザーは使用できなくなり、フォームはフィールドを送信しません

はユーザーによってのみ無効にされます。つまり、ユーザーは操作できませんが、フォームは送信されます

カウントダウンラッシュの小規模なケース

$interval サービスは、ダーティデータ検査を自動的に実行できる setInterval と同等です。


それをクリアしたい場合は、値を割り当ててから $interval.cancel ( timer)

ng-show は true と表示されます。非表示にする場合は false

ng-hide 非表示にする場合は true 。 false display

ng-if は ng-show と同じですが、表示されない場合はノードが dom ドキュメント内にないことになります

var app = angular.module("myapp",[])
app.controller("myController",function ($scope,$interval) {
$scope.num=1
$scope.canBuy = false
$scope.time = 5
  var timer = $interval(function () {
   $scope.time--;
   if($scope.time<=0){
    $scope.canBuy=true
    $interval.cancel(timer)     
   }
  },1000)
 })
ログイン後にコピー

ng-bind 関連

ng-バインドには問題があり、追加した後はデータ変数の後に何も追加できません。このデータのみがこのラベルに表示され、他のものは機能しません。たとえば、

{{name}}---111
用ng-bind-template就好
ng-bind-template="{{name}}---111"
ログイン後にコピー

があります。もう一つの問題は、ラベルを解析できないことです

大丈夫です、angular を合理化するために ng-bind-html

ng-bind-html="<h1>{{name}}---111</h1>"
ログイン後にコピー

を使用しても機能しません。これは 1.3 以降の大幅なオーバーホール中です。 .js、これは削除されました。これを使用する必要があります。プラグイン(モジュール)

もangular.moduleに「ngSanitize」を置く必要があります


そして、表示されるラベルを変数に掛ける必要があります。 、ng-bind-html に設定します

$scope.text= "<h1>"+$scope.name+"---111</h1>"
ng-bind-html=&#39;&#39;text“
ng-non-bindable
ログイン後にコピー

このコマンドは式の解析を防ぐことができます

<h3 ng-non-bindable>{{name}}</h3>
ログイン後にコピー

ng-include

HTML コード スニペットを導入することもできます変数を定義する必要があります。式はコード スニペットに記述することもできます

$scope.text=&#39;html/a.html&#39;;
ng-include=&#39;text&#39;
ログイン後にコピー

内部リクエストは ajax であるため、表示プロセス中はサーバー環境にある必要があることに注意してください

ng-model-options=&#39;{updateOn:&#39;blur&#39;}&#39;
ログイン後にコピー

, ノードが内部で動作してしまいパフォーマンスが良くないですが、このように設定すれば、ビューに表示されるデータをある瞬間に更新すればOKです

AngularJS

ng-controller
ログイン後にコピー

。オブジェクト指向の考え方を使用してコントローラーを作成できます

<p ng-controller="myController as myFun"> 
{{name}}<br>
{{myFun.age}}<br>
{{myFun.sex}}
</p>
myapp.controller("myController",["$scope",myFun])
function myFun($scope){
 $scope.name=&#39;allen&#39;;
 this.sex=&#39;male&#39;
}
myFun.prototype.age="18"
ログイン後にコピー

サービスについて話しましょう サービスは実際にはすでに多くのことが述べられています。


angularJS では、サービスは特定の関数を通じてデータと対話するために使用されます

$http service

$http({
 url:"http://datainfo.duapp.com/shopdata/getclass.php",
 method:"get",
 params:{}
}).success(function(data){
 $scope.dataList=data;
}).error(function(error){
 console.log(error)
})
ログイン後にコピー

メソッドは、配信メソッド get、post

url データインターフェイスを表します params 送信されたデータは、$.ajax のデータと同等です: {}

success success callback

error error callback

ここでは JSONP テクノロジーについて説明します

JSONP は相互問題を解決する方法です。ドメインの問題 一般的な方法クロスドメインの問題: ブラウザーには同一オリジンポリシーがあるため、異なるドメイン間でデータが交換されるとクロスドメイン問題が発生します

同一オリジンポリシー: 同じプロトコル、同じドメイン内でのみ発生します

JSONP の原則: スクリプト タグの src 属性 (データを受信するためにコールバック関数を使用します) を使用できます。これは、同一オリジンの影響を受けません。コールバック関数を設定することで、異なるドメインからデータをリクエストできます

データを受信する番号JSONP は、フロントエンドとバックエンドを組み合わせたクロスドメイン メソッドです。フロントエンドがデータをコールバック関数で使用する必要がある場合、バックエンドはデータをコールバック関数に戻す必要があります

JSONP属于AJAX吗?ajax是指通过使用xmlhttprequest对象进行异步数据交互的技术,jsonp是依靠scriptsrc属性来获取的,不属于ajax

JSONP有什么缺点,使用的时候需要注意什么?

不能post跨域处理,需要注意的是:每次请求应该动态的创建script标签和回调函数,数据获取完成后销毁。

如果method是jsonp的话,就可以用jsonp去跨域请求,但是注意要在url后写关于callback的值为JSON_CALLBACK

百度搜索小例子

这里引用的是 angular-sanitize.js

var app = angular.module("myapp",[&#39;ngSanitize&#39;])
app.controller("myController",function ($scope,$http) {
  $http({   url:"http://datainfo.duapp.com/shopdata/getclass.php",
   method:"post",
   params:{a:1}
  }).success(function (results) {
   $scope.dataList = results
  }).error(function (error) {
   console.log(error)
  })
 })
 app.controller("yourController",function ($scope,$http) {
  $scope.search = function () {
   $http({    url:"https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su",
    method:"jsonp",
    params:{
     wd:$scope.wd,
     cb:&#39;JSON_CALLBACK&#39;
    }
   }).success(function (results) {
    $scope.dataList = results.s
   })
  }
 })
ログイン後にコピー

$location服务

console.log($location.absUrl())//输出绝对地址
console.log($location.host())//输出域名
console.log($location.port())//输出端口
console.log($location.protocol())//协议
$location.path("aaa")//在路由中控制切换页面
console.log($location.path()) // #/aaa
ログイン後にコピー

$log 服务

多种控制台输出模式

$log.info("info");
$log.warn("warn");
$log.error("error");
$log.log("log");
ログイン後にコピー

angularJs对服务供应商配置

例如

myapp.config(["$interpolateProvider",function($interpolateProvider){
 $interpolateProvider.startSymbol("!!");
 $interpolateProvider.endSymbol("!!");
}])
ログイン後にコピー

angular就不认识{{}}了,开始变成!!!!

自定义服务 三种

1.factory

myapp.factory(&#39;serviceName&#39;,function(){
  return ....
})
ログイン後にコピー

可以return 字符串、数组、函数、对象(使用最多,最和逻辑)

引入方法和angualr自带的前面加$的服务完全一样,使用方法取决于return出来的是什么东西,自定义服务的服务名还是别加$了

eq:返回一个 两个数之间的随机数的服务

myapp.factory("myService",function(){
 return {
  getRandom:function(a,b){
   return Math.random()*(b-a)+a;
  }
 }
})
ログイン後にコピー

自定义的服务可以依赖注入其他服务

myapp.factory(&#39;myHttpService&#39;,[&#39;$http&#39;,function($http){
   return {
     $http({
       url:......
     })      
     }
}])
ログイン後にコピー

eq:下一个自定义的http服务

myapp.factory("myHttpService",["$http",function($http){
  return {
    http:function(url,sfn,efn){
      $http({
        url:url,
        method:"get"
      }).success(sfn).error(efn)
    }
  }
}])
myHttpService.http("http://datainfo.duapp.com/shopdata/getclass.php",function(data){
  console.log(data)
},function(data){
  console.log(data)
})
ログイン後にコピー

2.provider

可以通过去自定义一个服务供应商去定义一个服务,写法有区别,服务功能性的东西需要嵌套一层返回

myapp. provider (&#39;myHttpService&#39;,[&#39;$http&#39;,function($http){
   return {
     $get:function(){
     return:{//这里才是输出
     } 
     }
}])
ログイン後にコピー

外面return出来的是这个服务的供应商,供应商的$get方法里返回的才是供我们使用的部分,可以通过更改供应商的部分参数来控制服务的功能,

eq:还是返回一个范围内的随机数,但是通过配置供应商的一个值来控制服务返回的是整数还是小数

myapp.provider("myService",function(){
  return {
    isInt:true,
    $get:function(){
      var that=this;
      return {
        getRandom:function(a,b){
          var num=Math.random()*(b-a+1)+a;
          if(that.isInt){
            return Math.floor(num);
          }else{
            return(num)
          }
        }
      }
    }
  }
})
myapp.config(["myServiceProvider",function(myServiceProvider){
  myServiceProvider.isInt=false;
}])
ログイン後にコピー

通过这种方法创建的服务是可以配置供应商的

3.service

通过这种方法创建出来的只能是对象
最简单的创建方式,自带返回,支持面向对象的写法

myapp.service("myService",function(){
    this.getRandom=function(a,b){
      return Math.random()*(b-a)+a;
    }
})

myapp.service("myService",aaa)
function aaa(){
  this.getRandom=function(a,b){
    return Math.random()*(b-a)+a;
  }
}
ログイン後にコピー


多个控制器间数据的共享

实现多个控制器数据共享的方法有这样三种,

第一种比较简单,就是把数据放到父作用域上,就都可以访问了

第二种就是在控制器里通过$$prevSibling找到兄弟作用域,然后使用数据,需要注意的是,如果是初始数据类型的话就不能做数据双向绑定了

第三种是定义服务,把需要共享的数据做成服务,这样就都可以用了

<body>

  <p class="container">
    <p ng-controller="firstController">
      <input type="text" class="form-control" ng-model="name">
      <input type="text" class="form-control" ng-model="data.name">
      <input type="text" class="form-control" ng-model="Data.name">
      <p>
        first-name:{{name}}<br>
        first-data-name:{{data.name}}<br>
        first-Data-name:{{Data.name}}
      </p>

    </p>
    <p ng-controller="secondController">
      <p>
        second-name:{{name}}<br>
        second-data-name:{{data.name}}<br>
        second-Data-name:{{Data.name}}
      </p>
    </p>
  </p>
</body>
<script src="../Base/angular.min.js"></script>
<script>
  var app=angular.module("myapp",[]);
  app.factory("Data",function () {
    return {
      name:&#39;lily&#39;
    }
  })
  app.controller("firstController",function ($scope,Data) {
    $scope.name="allen";
    $scope.data={
      name:&#39;tom&#39;
    }
    $scope.Data=Data;
  })
  app.controller("secondController",function ($scope,Data) {
    $scope.name=$scope.$$prevSibling.name;
    $scope.data=$scope.$$prevSibling.data;
    $scope.Data=Data;
  })
</script>
ログイン後にコピー

自定义模块

所有的模块都有服务,ng-app这个模块理由¥scope什么的服务,

咱们自己也可以写一个模块,然后里面可以去写服务

这样就可以把某些服务写在某个自定义的模块里,实现重复调用

例如把随机数的例子写在一个自定义的模块里

var myModule=angular.module("myModule",[]);
myModule.service("myService",function(){
  this.ran=function(a,b){
   return Math.random()*(a+b)-a;
  }
})
var myapp=angular.module("myapp",["myModule"]);
myapp.controller("myController",["$scope","$log","myService",function($scope,$log,myService){
 $log.log(myService.ran(5,10))
}])
ログイン後にコピー

其实像angualr.sanitize.js就是一个自定义模块

相关推荐:

如何用AngularJS编程思想

AngularJs表单验证的方法

AngularJs增删改查的方法

以上がangularJS のいくつかの使用法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート