关于angularjs:Angular:ng-init不在负载上运行

Angular : ng-init does not run on load

尽管我似乎找不到使用控制器引用它的ng-init问题,但在堆栈溢出中我看到了一些实例。

我通过在html文件中包含以下内容来调用控制器中的函数

1
 

在控制器中:

1
2
3
4
$scope.init = function(){

        alert("do something");
};

它确实可以运行,但是在组件加载到屏幕上之前就可以运行。

我错过了什么吗?

谢谢


ng-init应该像这样工作,因为它用于初始化数据。

一个非常简单的例子:

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')

})

编辑-假设您使用的是ngView
要使代码在页面完全加载时运行,您应该在事件$viewContentLoaded上设置观察者,如下所示:

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");
    });