ionic 搜尋雙向資料繫結失效

2022-09-17 06:24:14 字數 1219 閱讀 8506

1.用data物件儲存變化的資料

js:

$scope.data={};

$scope.data.keywords = "";

$scope.search = function());

}

html:

2.把路由定義中的controller去掉,直接在模板檔案中的ion-content上顯示宣告ng-controller="homectrl",這樣之前的**就能起作用。

雙向資料繫結失效的原因:

首先,在ionic路由中定義了模板檔案的controller後,ionic會在載入模板檔案後,在模板檔案的最頂級dom上(也就是ion-view)建立你的controller作用域$scope,然後由於ionic在我頁面上的ion-content沒有找到我顯示宣告的ng-controller,所以他會自動建立了乙個匿名的作用域$scope2(這裡我認為是ionic的內部機制會在ion-content上預設建立一層作用域,並沒有真的研究過),那麼因為我的controller中定義了keywords,實際上這裡是$scope.keywords,但是頁面上實際顯示的其實是$scope2.keywords,這個值並沒有定義,根據angular的作用域繼承關係,$scope2.keywords= $scope.keywords,當我改變該值的時候,變化的是$scope2.keywords,但是這時候$scope.keywords這個值是並沒有變化的。所以我在controller裡面獲取的$scope.keywords沒有變化。

那麼為什麼按上面2種方法修改可以解決這個問題呢?

首先當我把keywords改成了data.keywords後,$scope2繼承的就是是$scope的data物件,而熟悉js的同學都知道,修改$scope2.data物件中的引用則$scope.data也會改變,所以這種方法可以使2層作用域中的值同時改變,在controller中獲取到的值就是介面上一樣的值了。

第二種方法去掉了路由中定義的controller,直接寫在模板中的ion-content上,這樣模板檔案載入進來後,就只有ion-content上的一層作用域了,雙向資料繫結當然就起作用了。(如果ng-controller寫在模板檔案的ion-view上,依然是沒用的,所以我猜想ionic是會自動在ion-content上建立作用域)

參考文獻:

ionic3 雙向資料繫結失效 髒值檢測失效

最近在使用ionic3過程中,使用了eval 方法進行字串拼接成乙個function使用 在eval 方法中,只能使用區域性變數,全域性變數無法使用,ionic3的this在eval中失效 undefined 同時,在eval 方法拼接起來的function中,呼叫自定義的function,同樣也無...

vue雙向繫結失效賦值失效

為什麼會失效呢 首先vue資料雙向繫結是通過資料劫持結合發布者 訂閱者模式的方式來實現的 實現方式是get和set方法 然後是通過object.defineproperty 來實現資料劫持的。然後呢要是,實現資料的雙向繫結,首先要對資料進行劫持監聽,因為寫的 沒有被監聽到,所以只能手動set thi...

雙向資料繫結

2 mvvm 2.總結mvvm 二 vue 2 實現mvvm主要包含兩個方面,資料變化更新檢視,檢視變化更新資料 最近面試時老被問到雙向資料繫結。明明概念看了好幾遍,也總結了好幾次,但是還是被問住 參考文章 很欣賞這篇部落格作者的一句話,再長的路,一步步也能走完。再短的路,不邁開雙腳也無法到達。送給...