【发布时间】:2017-09-13 20:33:31
【问题描述】:
我们正在从一个非常旧版本的 UI 路由器升级到 v1.0.5,我在尝试替换我们已弃用的 $stateParams 使用时遇到了问题。举一个简化的例子,我们有一个unique-name 属性类型指令,我们在表单字段上使用来进行验证检查,以确保字段中的文本是唯一的名称。我们的想法是,我们要么添加新的 doohickey,要么更改现有 doohickey 的名称,并且我们希望确保没有其他 doohickey 具有相同的名称。
在我们的旧代码中,我们可以像这样从$stateParams 中获取doohickeyId 值:
function uniqueName(doohickeySearchService, $stateParams, $q) {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, elm, attrs, ctrl) {
ctrl.$asyncValidators.uniqueName = function (modelValue) {
// use doohickeySearchService to look up foundDoohickey by name
// then...
return foundDoohickey.id !== $stateParams.doohickeyId;
};
}
};
}
可能过于简单了,但问题的核心是:我们如何在不使用已弃用的$stateParams 的情况下访问doohickeyId 值?有一个从 url 获取它的父状态,类似于/doohickey/{doohickeyId:int}/edit,如状态定义中所指定。
我可以使用$state 来获取$current 状态,以及来自path 属性的状态数组,我什至可以在路径中的一个状态中看到doohickeyId 参数。不幸的是,如果我采用参数的value(),它会返回未定义,即使$stateParams 具有正确的doohickeyId 值。我还尝试添加 doohickeyId 作为父状态的解析,但不幸的是,这并没有在我需要的属性类型指令上提供任何数据。
阅读文档和谷歌搜索正在打开对从子 states 或组件访问父数据的引用,但我试图从属性类型指令而不是状态/零件。有没有办法在不对我们的代码库进行大修的情况下做到这一点?
【问题讨论】:
标签: angularjs angular-ui-router