Angularjs 通过函数初始化

Angularjs 通过函数初始化,angularjs,angularjs-directive,angularjs-ng-init,Angularjs,Angularjs Directive,Angularjs Ng Init,如您所知,可以按如下方式初始化对象: <div ng-init="friends = [{name:'John', phone:'555-1276'}, {name:'Mary', phone:'800-BIG-MARY'}, {name:'Mike', phone:'555-4321'}, {name:'Adam', phone:'555-

如您所知,可以按如下方式初始化对象:

<div ng-init="friends = [{name:'John', phone:'555-1276'},
                         {name:'Mary', phone:'800-BIG-MARY'},
                         {name:'Mike', phone:'555-4321'},
                         {name:'Adam', phone:'555-5678'},
                         {name:'Julie', phone:'555-8765'},
                         {name:'Juliette', phone:'555-5678'}]"></div>

是否可以通过函数定义类似的对象:

<div ng-init="init()">

我的目标实际上是从API中获取对象,并通过ng repeat将它们显示在列表中,表示
ng init
将采用任何表达式。是的,只要相关的作用域定义了一个名为
init()
的函数,您就可以做上面想要做的事情(我也验证了它)

请注意,文档中指出,
ng init
实际上仅用于
ng repeat
中的别名属性:

唯一适合使用ngInit对 重复,如下面的演示所示。除此之外,您还应该使用 控制器而不是ngInit来初始化作用域上的值

最后,请注意,您可以在创建控制器时简单地初始化变量。所以根本不需要使用
nginit
。例如:

var myApp = angular.module('myApp', []);

myApp.controller('myController', ['$scope', function($scope){

  $scope.init = function() {
    $scope.a = 'Apples';
    $scope.b = 'Bees';
    $scope.c = 'Zebras';
  };
  // runs once per controller instantiation
  $scope.init();

}]);
所以根本不需要使用nginit

有时,您可能希望通过在视图中传递数据来初始化某些内容,这可能在.NET MVC等模板页面中有其用途,您希望在该页面中将信息从.NET传递到angular(controller已经有数据,最简单的方法是在ViewBag中传递)

要做到这一点,“正确”的方法是迂回的,而且很难维护,因为您必须在页面上嵌入一个带有固定ID的脚本标记,并使用javascript/jquery将数据拉入控制器中的作用域,再次使用硬编码ID


无论哪种方式都会打破(嗯,很糟糕)角度的MVW模式,因此,我想,选择你的毒药。

也许我应该更好地使用“所以真的没有必要使用
ng init
”。OP不需要在他们的案例中使用
ng init
。我还发现了
ng init
的一个用例,当我想从服务器加载常见的本地化文本字符串(数据验证、全局错误消息等)时。我不想将我的PHP文本数组复制到JSON文件中,并通过XHR单独加载它们,也不想创建一个新的PHP控制器操作来单独返回文本。Ng init似乎是一个很好的解决方案,它可以用我的SPA应用程序的框架一次加载文本,然后将这些文本存储到一个全球i18n Angular服务中,因此它们可以在我的整个应用程序中使用。这对我来说不起作用。我也做了同样的事。我的UI表单有ng模型,如object.a、object.b等。。。在我的控制器中,我有一个init函数,$scope.object.a='myValue',$scope.object.b='myValue'等等。。它说,它找不到属性a。“我错过了什么?”Sandepallampalli看到你的代码很难说。但是如果我猜的话,在尝试设置
$scope.object.a
上的值之前,您可能需要初始化
$scope.object
<代码>$scope.object={}$scope.object.a='myValue'或
$scope.object={a:'myValue',b:'myValue'}对,我后来意识到了这一点,并将其定义为json格式,如$scope.object={a:'myValue',b:'myValue'};而且效果很好:)谢谢你的回复!如果他们重新命名这个ng别名可能会有所帮助。。。或分配。。。就目前情况而言,他们将其命名为用于他们告诉开发人员不要使用它的目的。。。获取混合消息lolI使用ng init对每个项目进行简单计算,例如,显示我使用的函数的人名,因此它是更干净的代码。。。