我正在使用ui-router 0.2.8。我想根据设备宽度加载模板。我可以毫无问题地获得设备的宽度,将其设置在范围等,但我可以弄清楚如何将其绑定到$
stateParams。我在另一个控制器中有scope变量,可以访问该状态的控制器,但状态本身不可用。我试过了templateProvider,但这只是返回一个字符串。为了使它起作用,我还能尝试什么?
.state('list', {
abstract: true,
url: "/list",
templateUrl: 'views/'+$stateParams.somevalue+'/page.html',
controller: "myCtrl"
})
.state('list.first', {
url: "/first",
templateUrl: "views/first.html"
})
您可以在$stateChangeStart
事件中访问状态参数。您也可以在templateUrl
那里动态更新。
因此,您的代码可能看起来像这样:
angular.module('app', ['ui.router'])
.run(function($rootScope){
$rootScope.$on('$stateChangeStart', function(event, toState, toParams) {
if (toState.name === 'list') {
toState.templateUrl = 'views/'+toParams.somevalue+'/page.html';
}
});
}
您可能还想看看ui.router支持的onEnter回调。我以前没有使用过它,但是它比将模板生成代码放入$stateChangeStart
事件中更整洁。
最终编辑:使用transcluded指令处理plunker。 编辑:我用第一个答案中给出的解决方案做了第一次撞击。它可以工作,但这不是期望的行为,因为模板包含所有的部分内容。 我用我希望达到的目标做了第二次尝试(但显然不起作用)。我认为这主要是因为模板不是分部的父级,但它包含在其中,所以ui路由器不太理解我想要什么。 在此方面的任何帮助都将不胜感激! 我们正在建立一个网站与角材料和UI路由器,我们
问题内容: 这可能很简单,但是我在文档中找不到任何内容,因此使用谷歌搜索没有帮助。我正在尝试定义一个状态,在该状态下,我需要在服务器上单击以提取所需数据的URL取决于状态URL参数。简而言之,类似于: 上面的方法不起作用。我尝试注入以获取所需的参数,但是没有运气。什么是正确的方法? 问题答案: 您关系密切。如果使用ui-router,请改用。该代码对我有用:
问题内容: 我是新手,尤其是ui路由器。 这里是一个链接: 该链接是动态填充的。 因此,当我尝试像这样从我的配置访问该状态时: 我收到此错误消息: 错误:无法从状态“主题”解析“ / topics / myTopic” 在上面:是一个变量名。 问题答案: 你快到了。仅参数必须是URL定义的一部分,而不是状态名称: 以及如何调用它 (将在其中动态注入作为ng-repeat的一部分) 因为表示:。更多
问题内容: 这是我的app.js文件-我有一个父状态和两个子状态。两个子视图都需要该对象。 我想使用此已解析的obj来决定子模板 我怎样才能做到这一点? 问题答案: 有一个可行的例子。而不是我们应该使用。这是新的状态def: 我们为什么要使用这种方法?如此处记录: 范本 TemplateUrl … 也可以是返回url的函数。 它采用一个预设参数,该参数不会被注入。 TemplateProvider
问题内容: 我正在尝试找到一种优雅的方法来创建一个自定义的 body标签 动态类,该类可以从中轻松设置,如果未设置,则可以使用默认选项或不使用。 例: routes.js 简单标记HTML 场景: 1 -参观 登录 我应该有 一流 的身体等于 2-此时访问 寄存器 ,它将具有相同的类 3-访问 个人资料* ,身体将具有 默认 类别或 没有 默认 类别 * 您如何实现的? 问题答案: 您可以拥有一个
问题内容: 如何使用从数据库中获取的名称作为templateUrl文件名? 我已经试过了: 如果我的$ rootScope.template来自数据库查询,那似乎不起作用。不知道为什么,但是不起作用。 如果在我的控制器中执行$ rootScope.template =“ whatever.html”,则一切正常,但是,如果我从数据库中查询模板,则什么也不会发生。templateProvider中的