我已经看到关于这个ng-init问题的堆栈溢出的一些exmaples,虽然我似乎找不到使用控制器引用它的一个。
我通过在html文件中包含以下内容来调用控制器中的函数
<div class="tab-container" ng-controller = "ExampleController" ng-init = "init()" >
在控制器中:
$scope.init = function(){
alert("do something");
};
它确实运行,但它在组件加载到屏幕上之前运行。
我错过了什么吗?
由于
答案 0 :(得分:15)
ng-init
应该像这样工作,因为它用于初始化数据。
一个非常简单的例子:
<ul ng-init="list = [1,2,3,4]">
<li ng-repeat="l in list"></li>
</ul>
如果您在控制器加载时尝试运行某些,它实际上比您想象的要简单得多:
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')
})
})
答案 1 :(得分:0)
另一个选择是使用jquery。如果您依赖许多元素,它将很合适。但是,请确保使用您选择的版本来加载jquery。 加载jQuery(在其中插入版本):
<script src="https://code.jquery.com/jquery-..."></script>
js代码:
$(document).ready(function() {
alert("do something");
});