AngularJS,将params传递给另一个控制器

时间:2015-01-14 15:28:20

标签: angularjs

一个简单的问题。

我在数组中有一些对象,我必须生成一些按钮。

[{
title: "Uno",
url: "http://xxx.json"
},
title: "Due",
url: "http://xxx.json"
}]

使用ng-repeat

一切正常
<button ng-repeat="genre in home.genres.genres" ui-sref="genre" class="button button-block button-light">{{genre.title}}</button>

现在我遇到了一个问题:当用户点击一个按钮时必须进入新视图,类型,但在新视图中我必须对相关网址进行$ http调用。如何将数组项中的url传递给新控制器?

2 个答案:

答案 0 :(得分:0)

我假设您使用的是ui-router?如果是这样,ui-sref将仅适用于<a>元素。

查看文档的ui-sref部分 https://github.com/angular-ui/ui-router/wiki/Quick-Reference#ui-sref

这里有一些改变。

您需要在目标状态url中指定参数。 例如:

url:"genre/{mygenre}"

这将添加&#39; mygenre&#39;该状态的参数

然后我会在你的ng-repeat中使用除了类型之外的单词。您正在使用名为genre的视图,然后使用也称为流派的重复项目。它可能会导致意外的错误,通常只是令人困惑。在这个例子中,我将它命名为genreItem。

然后通过你的ui-sref标签传递你的参数,例如

ui-sref="genre({mygenre:genreItem})"

然后在控制器内部为目标状态,注入$ stateParams,然后允许你使用指定的参数

app.controller("genreController", function($scope, $stateParams){
   alert( $stateParams.mygenre )
});

if 你想要使用你的按钮,注入$ state并创建一个调用$ state.go(&#34; genre&#34;,params)的函数,然后将该函数绑定到ng - 点击按钮。

答案 1 :(得分:0)

你离解决方案不远;假设您正在使用ngRoute

通过修改按钮的定义以包含通过ng-click(...)的函数调用,您可以获得所需的结果。

<button ng-click="loadOtherController(genre.url)" ng-repeat="genre in home.genres.genres" ui-sref="genre" class="button button-block button-light">{{genre.title}}</button>

现在,在您的控制器中加载按钮,您需要定义loadOtherController(...)功能。

$scope.loadOtherController = function(targetURL) {
   $location.url(targetURL);
}

此外,不要传递完全限定的网址,只需传递名称即可。因此http:\\something-great.json变为something-great

在另一个控制器中,然后使用$routeParams获取targetURL,然后在修改网址以包含$http扩展名后,您可以将其传递给.json。< / p>

希望这有帮助。