Angularjs自定义指令不适用于ui-sref

时间:2017-07-05 18:23:45

标签: angularjs angularjs-directive ui-sref

首先,这有效:<a ui-sref="students({courseId: $ctrl.Course.Id})">{{ student.Name }}</a> 哪个支持我的路由器工作正常。

我创建了一个自定义指令:链接:&#34; =链接&#34;

<div ng-if="$ctrl.link && $ctrl.link.Name && $ctrl.link.State">
            <a ui-sref="{{$ctrl.link.State}}">{{$ctrl.link.Name}}</a>
</div>

为什么这不起作用:

<div link="{ Name: 'View Students', State: 'students({courseId: $ctrl.Course.Id})' }">

这是错误:

  

过渡拒绝($ id:0类型:6,消息:转换错误,详细信息:错误:Param值对州'学生'无效)

更新: 我的自定义指令

angular.module('Foo').component('Bar', {
        controller: LinkController,
        templateUrl: "link.tpl.html",
        transclude: true,
        bindings: {
            link: "=link",
    });

1 个答案:

答案 0 :(得分:2)

我解决了这个问题如下:

我如何调试:我尝试用123(数字)替换'$ ctrl.Course.Id',它有效。所以我知道我的自定义链接指令正在运行。

<div link="{ Name: 'View Students', State: 'students({courseId: $ctrl.Course.Id})' }">

然后我意识到这是因为我在单引号中加上'$ ctrl.Course.Id',它会将其解析为字符串,而不是数字。

所以,这就是我所做的:

转到组件,创建一个对象:
this.studentsLink = { Name: 'View Students', State: 'students({courseId:'.concat(this.$stateParams.courseId, '})')};

我的这个。$ stateParams.courseId 是一个字符串。如果是数字,我们应该this.$stateParams.courseId.toString()

然后转到Template:

<div link="$ctrl.studentsLink">

希望这有助于未来的开发人员遇到同样的问题。