このng-initの問題に関するスタックオーバーフローの例をいくつか見ましたが、コントローラーを使用してそれを参照する例を見つけることができないようです。
私はhtmlファイルに次のようにすることでコントローラーの関数を呼び出しました
<div class="tab-container" ng-controller = "ExampleController" ng-init = "init()" >
コントローラで:
$scope.init = function(){
alert("do something");
};
実行されますが、コンポーネントが画面にロードされる前に実行されます。
私は何かを逃していますか?
ありがとう
ng-init
はデータの初期化に使用されるため、このように機能するはずです。
非常に単純な例:
<ul ng-init="list = [1,2,3,4]">
<li ng-repeat="l in list"></li>
</ul>
コントローラのロード中にsomethingを実行しようとすると、実際には思ったよりもはるかに簡単です。
app.controller('mainCtrl', function ($scope) {
var init = function ($scope) {
// do whatever you need to do to initialize your controller
$scope.someData = ["Hey", "I'm", "Alive"]
$scope.otherData = localStorage.getItem('myBackup')
}
init()
})
または、関数が必要ない場合(クロージャーなどは必要ありません)、さらに簡単です。
app.controller('mainCtrl', function ($scope) {
// do whatever you need to do to initialize your controller
$scope.someData = ["Hey", "I'm", "Alive"]
$scope.otherData = localStorage.getItem('myBackup')
})
編集-ngView
を使用していると仮定して:
ページが完全に読み込まれたときにコードを実行するには、イベントにウォッチャーを設定する必要があります$viewContentLoaded
、 このような:
$scope.$on('$viewContentLoaded', function(){
//Here your view content is fully loaded !!
});
app.controller('mainCtrl', function ($scope) {
// This event is triggered when the view has finished loading
$scope.$on('$viewContentLoaded', function() {
$scope.someData = ["Hey", "I'm", "Alive"]
$scope.otherData = localStorage.getItem('myBackup')
})
})
別のオプションはjqueryを使用することです。あなたが多くの要素に依存しているなら、それは合います。ただし、プロジェクトに選択したバージョンのjqueryをロードしてください。 jqueryの読み込み(バージョンを挿入...):
<script src="https://code.jquery.com/jquery-..."></script>
jsコード:
$(document).ready(function() {
alert("do something");
});