在ng-init中声明多个值


85

因此,我想知道如何在单个ng-init中声明多个值,而不必创建一些怪异的哈希,那么我需要始终专门进行访问。

所以基本上我想

<div ng-init="a = 1, b = 2">{{a}}</div>

我是说我想避免做

<div ng-init="unecessary_bs = {a: 1, b: 2}">{{unecessary_bs.a}}</div>

但是合理的:

<div ng-init="a = 1, b = 2">{{a}}</div>

似乎不起作用。

预期的感谢


"a = 1, b = 2"因为它的javascript和分号是分开声明的原因,所以这是不合理的,但是这个想法是相同的
Bernardo Dal Corno

Answers:


144

使用函数,方法更易读:

ng-init="init()"

和:

$scope.init = function() {
    $scope.a = 1;
    $scope.b = 2;
}

或者,如果必须,请使用分号分隔内联变量:

ng-init="a = 1; b = 2"

7
这不适用于ng-repeat,因为它具有自己的作用域,请参见jsfiddle.net/U3pVM/13212
Toolkit,

@Toolkit使用点表示法(controllerAs语法)来引用ng-repeat隔离范围之外的函数。将ng-repeat的预定义$ index变量传递给从视图调用的函数。
–rickpatty

评估从哪一侧开始?例如,如果我想在另一个语句中使用变量,应该如何编写我的语句?例如:ng-init =“ a = 12; b = 1 + a”或init =“ b = 1 + a; a = 12;”?它从左算起是javascript吗?
Pooya '16

@Пуя-我会这样认为。您可以对其进行测试:ng-init="c = a + b; a = 1; b = 2"看看结果c是什么-最佳猜测,它从左到右。
tymeJV

39

有时将变量放入函数中并不理想。例如,您的后端是快速快递,而您正在使用玉石渲染文件。

使用Express.js,您可以将局部变量发送到html。Angular可以接受这些变量

ng-init=""

使用“;” 一个可以有多个变量

ng-init=" hello='world'; john='doe' "  

8

我更喜欢用对象初始化变量包装:

<div ng-init="initObject = {initParam: 'initParamValue', anotherOne: 'value'}"></div>

这是天才!
Cengkuru Michael

3
 <div ng-app="app">
  <div ng-controller="TodoCtrl">
    <ul>
      <li ng-repeat="todo in todos" ng-init='initTodo = init(todo)'>
        <span class="done-{{todo.done}}">{{todo.text}} |
                               and todo.text via init:{{initTodo}}</span>
      </li>
    </ul>

  </div>

  var modulse = angular.module("app",[]);

  modulse.controller("TodoCtrl", function ($scope)  {

            $scope.todos = [ {text:'todo1'}, {text:'todo2'}]; 

            $scope.init = function (todo) {  return todo.text; };

  });
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.