【问题标题】:angular call a function and pass id角度调用函数并传递 id
【发布时间】:2016-01-22 00:44:20
【问题描述】:

如何在 Angular 项目中使用 ng-init 将值传递给函数? 我试过了,效果很好:

<div ng-controller="myCtrl" ng-init="myfunction(1)">

但问题是,当我这样做时

<div ng-controller="myCtrl" ng-init="myfunction({{id}})">

<div ng-controller="myCtrl" ng-init="myfunction(id)">

没有用!! 如果我在模板中显示 {{id}} 的值,我会得到 id: 1 所以id确实存在。

这里有什么问题?

【问题讨论】:

  • stackoverflow.com/questions/19981627/…。除此之外,您基本上是在尝试调用控制器上的 init 函数,从控制器传入一个值?只需直接从 init 方法访问即可。
  • 首先,{{id}} 并不意味着作为参数传递给函数。函数调用不会插入它。 id 初始化在哪里?
  • myFunction 需要在范围内。
  • 你能显示你的控制器的代码吗?

标签: angularjs function ng-init


【解决方案1】:

正如 Brendan Green 提到的,如果 id 是一个范围变量,则不需要将其传递给函数。像这样的东西有用吗?

$scope.myfunction = function(){
  // do whatever with $scope.id
}

如果您确实需要使用它,那么您的第三个示例应该可以工作。这是plunker

【讨论】:

    【解决方案2】:

    在这里创建了一个小提琴:http://jsfiddle.net/frishi/HB7LU/22553/

    基本上,将变量本身传递给函数而不是插值,即{{boo}}

    <div ng-controller="MyCtrl" ng-init="boo=2">
      <div ng-click="foo(boo)">Click Me</div>
    </div>
    

    【讨论】:

    • 声明变量然后将其传递给ng-click 有什么意义?你不妨只做ng-click="foo(2)",OP 已经在他的ng-init 中声明了它的工作原理。问题是关于将变量传递给ng-init
    • @BrendanGreen 感谢您的纠正!你是对的。
    【解决方案3】:

    为了在ng-init 中使用myfunction,该函数应该在你的$scope中定义,因为无论它们是什么,ng-init 都会计算表达式。

    所以这是你应该做的:

    HTML:

    <body ng-controller="MainCtrl" ng-init='myfunction("john");'>
        <p>Hello {{name}}!</p>
      </body>
    

    JS:

    app.controller('MainCtrl', function($scope) {
      $scope.name = 'Mike';
      
      $scope.myfunction = function(otherName){
        $scope.name = otherName;
      };
    });
    

    Example

    请记住,不建议这样使用ng-init

    ngInit 唯一合适的用途是为特殊属性设置别名 ngRepeat,如下面的演示所示。除了这种情况,你应该 使用控制器而不是 ngInit 来初始化作用域上的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-24
      相关资源
      最近更新 更多