Angular : ng-init does not run on load
尽管我似乎找不到使用控制器引用它的ng-init问题,但在堆栈溢出中我看到了一些实例。
我通过在html文件中包含以下内容来调用控制器中的函数
1 |
在控制器中:
1 2 3 4 | $scope.init = function(){ alert("do something"); }; |
它确实可以运行,但是在组件加载到屏幕上之前就可以运行。
我错过了什么吗?
谢谢
一个非常简单的例子:
1 2 3 4 5 6 | <ul ng-init="list = [1,2,3,4]"> <li ng-repeat="l in list"> </li> </ul> |
如果要在加载控制器时尝试运行某些程序,则实际上比您想象的要简单得多:
1 2 3 4 5 6 7 8 9 10 11 | 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() }) |
或更简单,如果您不需要该功能(无闭包或其他功能)
1 2 3 4 5 6 7 | 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') }) |
编辑-假设您使用的是
要使代码在页面完全加载时运行,您应该在事件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $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(在其中插入版本):
1 | <script src="https://code.jquery.com/jquery-..."> |
js代码:
1 2 3 | $(document).ready(function() { alert("do something"); }); |