在控制器中的回调函数之外访问$ scope.property

时间:2013-05-09 20:08:22

标签: angularjs

想不出更好的头衔,抱歉。

请考虑以下代码 -

//controller
function ProductCtrl($scope) {
   getCategories(function (result) {
       $scope.category = result.categories[0].name;
   }); // asynchronouse method; getCategories calls uses XHR and returns the result as callback.
}

//view
{{category}}

当浏览器加载视图时,会立即调用getCategories。如何按需加载它,比如onLoad on div或者其他什么东西,以便我可以在其他地方重用这个方法?类似于$scope.getCategories返回我想要的数据,而不是控制器负载。我如何在视图中使用此方法?例如<div onload=getCategories()></div>有效吗?

另一个问题是,视图无法打印category。如何在$scope.category之外提供getCategories

1 个答案:

答案 0 :(得分:0)

  

当视图在浏览器中加载时,会立即调用getCategories。如何按需加载?

将其包装在一个函数中,并在适当的时候调用该函数:

$scope.getCategories = function() {
   getCategories(function (result) { ... }
}
  

所以我可以在其他地方重复使用这种方法吗?

如果多个视图需要访问getCatetories的结果,则应创建一个存储结果的服务。然后,您的控制器可以注入该服务以访问它。

  

视图不会打印类别。

你的AJAX发生在Angular的“外部”,因此Angular不知道正在调用回调并且$scope.category正在更新。只需在回调中更新$scope.$apply()后添加$scope.category,Angular就会生成digest cycle并更新您的观点。