Javascript 指令传递的值为空,异步数据加载仅在第二次单击后工作

Javascript 指令传递的值为空,异步数据加载仅在第二次单击后工作,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我有一个指令,它应该显示一些列出的日期,这些日期属于使用该指令的元素。因此,我希望传递元素数据库id,然后在指令中加载数据。我有两个问题: 1) 由于某种原因,元素id没有被传递下来,变量在指令内保持emtpy(在指令外它不是空的,我检查过了) 2) 异步数据加载(使用固定的pubId值进行测试)仅在我第二次单击按钮后有效,而不是第一次 <date-list pubId="pub.id"></date-list> 指令模板: <button type="butto

我有一个指令,它应该显示一些列出的日期,这些日期属于使用该指令的元素。因此,我希望传递元素数据库id,然后在指令中加载数据。我有两个问题:

1) 由于某种原因,元素id没有被传递下来,变量在指令内保持emtpy(在指令外它不是空的,我检查过了)

2) 异步数据加载(使用固定的pubId值进行测试)仅在我第二次单击按钮后有效,而不是第一次

<date-list pubId="pub.id"></date-list>
指令模板:

<button type="button" ng-click="dateOpen = !dateOpen; loadDates(pubId)">Dates:</button>
<div uib-collapse="dateOpen">
    <span ng-repeat="date in dates">...</span>
</div>
日期:
...

您好如果您有一个单独的作用域,其属性名为using camel case,则应使用破折号来使用参数。例如:

scope: {
    myParam: '='
}
应该这样使用:

<div my-param="data">

第三件事,为什么要使用
控制器
而不是
链接
。当您有需要相互通信的嵌套指令时,应使用
controller
函数。

您是否尝试在success函数中使用$apply?啊,是的:html中的
pubId
-属性应为:
pubId
,并且在指令中使用
pubId
是正确的。我认为改变这两件事会解决你的问题非常感谢!我完全忘了骆驼箱的事。我现在像你说的那样保存了切换功能,但不幸的是,它仍然只在点击两下后才会做出反应。关于link/controller,我首先使用link,但它根本不起作用,它告诉我$http不是一个函数(或者当我从参数中删除它时,它没有定义)。如果您知道如何修复,我可以再次将其更改为link:)您在指令app.directive('dateList',函数($http)中缺少$http依赖项注入…好的,谢谢!你知道为什么数据加载仍然需要两次点击吗?你能不能快速修改一下你的实际代码,这样我就能更好地看一看?好的,没关系。当我意识到错误时,我已经完成了一半。我不应该调用切换变量“dateOpen”,这很混乱。我需要从true开始,但我有false。因此折叠已经打开(没有数据),然后第一次单击关闭它,第二次单击打开它,加载数据。
<div my-param="data">
$scope.loadDates = function() {
    $scope.pubId
}