国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
ionic中獲取ng

轉(zhuǎn)載請注明出處:
http://blog.csdn.net/lishihong108/article/details/52225933
lishihong的博客

  今天在ionic中使用ng-model時(shí)候,在對應(yīng)的controller里面獲得值為undefined。以前在使用angularjs的ng-model綁定時(shí)候就可以拿到的啊,這就尷尬了,決定一探究竟。大家先看下面的一個(gè)demo。
  在學(xué)習(xí)angularjs的ng-model的數(shù)據(jù)雙向綁定時(shí)候,我們通過以下的代碼拿到對應(yīng)的ng-model的值:  
demo1

<div ng-app='myApp' ng-controller='myCtrl'> 名字: <input ng-model='name'> {{name}} <button ng-click='show()'>shoName</button></div>
  • 1
  • 2
  • 3
  • 4
  • 5

對應(yīng)的js

<script>var app = angular.module('myApp', []);app.controller('myCtrl', function($scope) { $scope.show=function(){ console.log($scope.name);//可以正確的拿到頁面上輸入的值 console.log(allPrpos($scope)); }; /*獲取某個(gè)對象的屬性*/ function allPrpos(obj) { // 用來保存所有的屬性名稱和值 var props = ''; // 開始遍歷 for(var p in obj){ if(typeof(obj[p])=='function'){ // 方法 //console.log(obj[p]); }else{ // p 為屬性名稱,obj[p]為對應(yīng)屬性的值 props = p '=' obj[p] '; '; } } // 最后顯示所有的屬性 console.log(props); }});</script>
  • 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

  通過打印$scope對象,看到其屬性的確包含一個(gè)name的鍵值對。但是在在ionic項(xiàng)目的時(shí)候,我們同樣是這樣拿的:
demo2

<ion-view view-title='Chats'> <ion-content> <div> 名字: <input ng-model='name'> {{name}} <button ng-click='show()'>shoName</button> </div> </ion-content></ion-view>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在ionic對應(yīng)的controller.js的對應(yīng)的ChatsCtrl:

angular.module('starter.controllers', []).controller('ChatsCtrl', function($scope) { $scope.show=function(){ console.log($scope.name);//控制臺打印undefined console.log(allPrpos($scope)); };});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

  在打印的$scope屬性里面并未發(fā)現(xiàn)name,控制臺打印undefined,頁面上{{name}}卻可以正常輸出來,這是為何呢?估計(jì)很多ionic初學(xué)者在做項(xiàng)目中都遇到過這個(gè)情況,是不是angularjs的數(shù)據(jù)雙向綁定在ionic中失效了?假如我這樣寫:  
demo3

<ion-view view-title='Chats'> <ion-content ng-controller='MyChatCtrl'> <div> 名字: <input ng-model='name'> {{name}} <button ng-click='show()'>shoName</button> </div> </ion-content></ion-view>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在controller.js里面重新定義一個(gè)MyChatCtrl:

angular.module('starter.controllers', []).controller('MyChatCtrl', function($scope) { $scope.show=function(){//點(diǎn)擊button console.log($scope.name);//控制臺可以正常打印每次input輸入框里面的值 console.log(allPrpos($scope)); };});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

  這樣大家應(yīng)該就看出一些端倪了吧,其實(shí)一切問題的根源就是scope。當(dāng)使用ng-model、ng-repeat等directive命令的時(shí)候,其本身會創(chuàng)建一個(gè)scope。其實(shí),這涉及到ionic的controller創(chuàng)建時(shí)機(jī)問題,ionic視圖路由里面創(chuàng)建的controller的scope的作用域要比下面的demo2中MyChatCtrl的scope的作用域要大;原來這兩個(gè)scope是不同的,這也就解釋了上面demo2為何拿到的值為undefind。發(fā)現(xiàn)問題了,如果解決這個(gè)問題呢?
  scope作用域是可以繼承的,js對象的屬性也是繼承的,所以我們可以稍微改下demo2,在剛才的ChatsCtrl先定義一個(gè)默認(rèn)值:  

var $scope.name={text:''};
  • 1

在頁面上input的ng-model:

<ion-view view-title='Chats'> <ion-content ng-controller='MyChatCtrl'> <div> 名字: <input ng-model='name.text'> {{name}} <button ng-click='show()'>shoName</button> </div> </ion-content></ion-view>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

  經(jīng)過做如此處理后,再點(diǎn)擊button發(fā)現(xiàn)可以正常打印$scope.name的值。如果你不想用對象的屬性這樣來做,你有可以把綁定的時(shí)候綁定到其父作用域的scope里面,demo2的ctrl不變,頁面上的代碼改為如下:

<ion-view view-title='Chats'> <ion-content ng-controller='MyChatCtrl'> <div> 名字: <input ng-model='$parent.name'> {{name}} <button ng-click='show()'>shoName</button> </div> </ion-content></ion-view>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

  這樣同樣可以拿到$scope.name的值,至此問題解決。ng-repeat等如果出現(xiàn)此問題,同樣可以如此處理。大家如果有其他的解決方案,歡迎留言提出。
 
參考文章

ionic的ng-model無法獲取值問題
深入理解angularjs的scope

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
ionic教程5
ionic之AngularJS(十)
AngularJS學(xué)習(xí)筆記
Angularjs Controller 間通信機(jī)制
ionic的側(cè)滑和下拉刷新效果
controller 間共享數(shù)據(jù)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服