Angular:ng-init不会在加载时运行

时间:2014-07-11 09:48:51

标签: angularjs controller angularjs-ng-init

我已经看到关于这个ng-init问题的堆栈溢出的一些exmaples,虽然我似乎找不到使用控制器引用它的一个。

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

<div class="tab-container" ng-controller = "ExampleController" ng-init = "init()" >

在控制器中:

$scope.init = function(){

        alert("do something");
};

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

我错过了什么吗?

由于

2 个答案:

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