Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ng init vs controller中的函数,在使用$parent时,哪一种做法更好?_Javascript_Angularjs_Twitter Bootstrap_Angularjs Scope_Angularjs Ng Repeat - Fatal编程技术网

Javascript ng init vs controller中的函数,在使用$parent时,哪一种做法更好?

Javascript ng init vs controller中的函数,在使用$parent时,哪一种做法更好?,javascript,angularjs,twitter-bootstrap,angularjs-scope,angularjs-ng-repeat,Javascript,Angularjs,Twitter Bootstrap,Angularjs Scope,Angularjs Ng Repeat,我有一个引导模式,对应于ng重复列表。我想从其父级访问ng repeat作用域数据,该父级包含模态。我这样做是为了在列表上单击modal按钮时,JSON中相应的数据会显示在modal中 我找到了两种方法,我想知道哪一种是最好的选择 方法1 视图: 方法2视图: <li ng-init="$parent.selected=item.counter-1" ng-repeat="item in data.webapps_1.items> 只要你保持一致,这两种方法中的任何一种都很好。但这

我有一个引导模式,对应于ng重复列表。我想从其父级访问ng repeat作用域数据,该父级包含模态。我这样做是为了在列表上单击modal按钮时,JSON中相应的数据会显示在modal中

我找到了两种方法,我想知道哪一种是最好的选择

方法1 视图:

方法2视图:

<li ng-init="$parent.selected=item.counter-1" ng-repeat="item in data.webapps_1.items>

只要你保持一致,这两种方法中的任何一种都很好。但这取决于应用程序的规模

依我看,如果应用程序将变得庞大,那么您将希望走功能化的道路,更好地坚持整个MVC理念,即解耦和分离关注点()


这是一个更好的结构,因为您希望将大部分业务逻辑保留在javascript控制器中,而不是视图中。

我个人更喜欢ng init方法。主要用于呼叫时间的一致性(即更像“onLoad”事件)。我理解关于SoC的担忧,这也是有道理的。然而,我已经看到了一些特定的场景(特别是带有大量指令的页面),当在(非ng init)函数中使用=绑定更改范围变量时,会导致额外的(过早的)摘要循环。显然,这取决于您在函数中实际执行的操作以及范围绑定,但在我看来,最好避免这种情况,并全面使用ng init指令。你的经历可能会有很大的不同。就像其他人所说的那样,选择一种方法并坚持下去,并意识到您在函数本身中进行的每个调用的影响。:)

编辑:关于已接受的答案,示例用于将值传递给ng init中的init函数。他是对的,这违反了模式。我通常使用无参数的init函数,并像这样调用它:

ng-init="model.init()"
对$scope的任何引用或您在函数本身内部所做的一切。我很少向init传递任何内容,除非它是静态值。例如,在ASP.NET WebApi项目的几个案例中,我希望尽量减少到服务器的往返,以便从MVC视图模型中解析一个值,该值只是作为字符串呈现和传递,如下所示:

ng-init="model.init(@model.myValue)"

在这些情况下,通常最好将其保持为简单的值类型(即字符串、int等),但对于小指令,例如只显示下拉列表的指令,我有时会传递数组以预填充下拉列表绑定。这些案例都是非常情境化的,尤其是这个案例,显然只有在使用服务器端呈现模板时才有效。

谢谢,这个链接非常有用
ng-init="myFunction(item,$parent)"
ng-init="model.init()"
ng-init="model.init(@model.myValue)"