【问题标题】:Passing value in function properly in AngularJS在AngularJS中正确传递函数值
【发布时间】:2016-11-12 13:34:24
【问题描述】:

我有以下以变量描述为参数的函数

$scope.relsingle = function(description) {
    console.log(description);
    var url = $scope.url+'/api/descrelation?limit=4&description='+description;
    $http.get(url).success(function(data) {
        console.log(data);
        $scope.apgresponse = data;
    })
};

我使用下面的方式在html页面中传递这个值

ng-init="relsingle(prodres[0].description)"

prodres[0].description 的这个值来自这里。

prodres的价值来自这里

$scope.prodat = function(id) {

    var uri = $scope.url+'/api/getproduct?productid='+id;
    console.log(uri);
    $http.get(uri).success(function(data) {
      console.log(id);
      console.log(data);
      $scope.prodres = data;
    })
  };

当我在 relsingle 函数的控制台中记录描述的值时。

console.log(描述);

这给了我未定义的价值。

【问题讨论】:

  • 我认为 ng-init 是为处理表达式而构建的,但不确定它是否适用于正在运行的函数。
  • 什么是prodres
  • relsingle 是我定义的自定义函数
  • 你没有从函数返回任何东西。请从relsingle返回一个值
  • 具体是什么未定义?请花几分钟阅读How to Ask

标签: javascript angularjs angularjs-scope angularjs-ng-init


【解决方案1】:

你不能用 ngInit 这样做,因为它只运行一次,并且当它发生变量 prodres 尚不可用时,因为它来自异步调用。

您可以做的是让ngInit 仅在prodres 的值被解析后执行:

<div ng-if="prodres" ng-init="relsingle(prodres[0].description)">...</div>

因为ngIf 的优先级更高,所以ngInit 只会在ngIf 之后执行。

【讨论】:

  • 首先使用ng-init 仍然是一种不好的做法
  • 那么我应该采用什么方法,请详细解释此类问题的合适方法
  • @charlietfl 我同意 ngInit 在许多情况下可能不是最好的方法。
  • @VikasAnand 规范是在第一个调用成功的情况下进行第二次调用......在控制器或服务中。视图不应用于管理控制器逻辑
【解决方案2】:

这是因为数组没有在 javascript 中求值。使用回调函数并将该数组存储在 $scope 范围内的变量中。然后你可以在函数中使用它

【讨论】:

    猜你喜欢
    • 2012-10-19
    • 1970-01-01
    • 2016-09-30
    • 2016-01-08
    • 2015-03-29
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多