一个简单的问题。
我在数组中有一些对象,我必须生成一些按钮。
[{
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传递给新控制器?
答案 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>
希望这有帮助。