ionic雙向數據綁定失效是為什麼?
建了一個ionic項目在ion-view裡面用ng-model雙向綁定$scop.orderId,在頁面上面能取到值但是頁面上面值變化的時
候$scope裡面的值不跟著變,下面分別是app.js、controller.js和、search.html的代碼,想知道問題出在哪裡了
使用對象html:
&
&&
&
js:
var Order = {
orderId: "123456"
};
$scope.Order = Order;
$scope.ok = function () {
alert($scope.Order.orderId);
}
如果你把controller不放在路由上,而是放在ion-content內部,直接用ng-controller加上,應該就可以。
目測上面有指令自己創建了一級作用域,所以,ng-model取值的時候是通過原型繼承獲得了值,但是賦值的時候在內部作用域上創建了新變數。
細節原理看我這篇講解:https://github.com/xufei/blog/issues/18試了一下,確實如徐飛大神所說,如果把路由中定義的controller改成直接寫在你模板文件中的ion-content上,就可以有效了(注意,ng-controller寫在ion-content上,如果寫在ion-view上一樣是無效的),根據徐飛大神所講解的angular作用域的知識,我猜測出現這個問題的原因應該是:
當你在路由中定義了一個模板頁面的controller時,他會在你這個模板頁中的最頂級dom上,也就是你的頁面上的ion-view創建你的controller作用域$scope,然後由於ionic在你頁面上的ion-content沒有找到你顯示聲明的controller,所以他會自動創建了一個匿名的作用域$scope2,那麼因為你的controller中定義了orderId,根據angular的作用域繼承關係,$scope2.orderId = $scope.orderId,這時候頁面上顯示出來的實際上是$scope2.orderId,當你改變該值的時候,那麼在界面上會變化,但是這時候$scope.orderId這個值是並沒有變化的。所以你在controller裡面獲取的orderid沒有變化。
那麼當你把orderId改成了data.orderid後,$scope2繼承的是$scope的data對象,修改對象中的引用則$scope.data.orderid也會改變,這就是為什麼用data.orderid可以起作用。
大家一定要看看徐飛大神的這個angular教程,受益匪淺https://github.com/xufei/blog/issues/18當你修改一個原始類型的值的時候會得到一個新的引用,所以需要用一個object 包裝一下,用object.key。
angular的數據雙向綁定在ionic的二級view中失效?
你用的span,這個是單向的雙向的是綁定到如 ng-model 上面,比如用的input
這個問題你好來時如何解決的呢?我也是採用這樣的方式,但遇到了同樣的問題
ng-bind 里不要加大括弧
就算是用對象你加個大括弧試試?推薦閱讀:
※行內元素中一個 display:none; overflow:hidden;導致的問題?
※哪些網頁適合前端新手去模仿?實踐過程中需要注意什麼?
※axure既然能畫高保真模型,為什麼不技術上優化代碼,直接用於前端?
※如何評價LayUI和他的作者閑心?
※前端頁面如何做到和設計稿一比一完美實現?