【发布时间】:2014-05-13 08:05:08
【问题描述】:
假设我有以下两个指令:
angular.module('foo').directive('outer', [function(){
return {
restrict: 'E',
scope: {
inner: '@',
innneParams: '@'
},
template: "<div {{inner}}{{innerParams}}></div>",
link: function(scope, elem, attrs){
console.debug("I AM IN YOUR OUTER DIRECTIVE PASSING YOUR D00DZ!")
}
}
}]);
angular.module('foo').directive('innerDir', [function(){
return {
restrict: 'EA',
scope: {
innerParam: '='
},
template: "<div>{{massagedInner}}</div>",
link: function(scope, elem, attrs){
console.debug('I AM IN YOUR INNER DIRECTIVE MASSAGING YOUR D00DS!')
scope.massagedInner = scope.innerParam + "FROM YOUR DOGE!"
}
}
}]);
还有以下 HTML:
<outer inner="inner-dir" my-awesome-scope-value="myAwesomeScopeValue" inner-params="inner-param='myAwesomeScopeValue'"></outer>
外部指令控制台调试触发,内部没有。我有什么好的方法来实现这种行为吗?
【问题讨论】:
-
您尝试将指令用作属性(内部属性),但您将其限制为
E(仅限元素)。您还需要将内部指令限制为属性:EA,比方说。您在这里还有一个结尾的单引号拼写错误:my-awesome-scope-value="myAwesomeScopeValue'。 -
这些都是问题,但是内部参数仍然没有绑定....更新了 plunk/question 以解决您的问题
-
我认为你不能在同一个元素上定义一个模板两次。你有外部和内部都在竞争这样做。您还两次请求隔离范围。内部看起来应该是一个元素指令,但我不清楚你的目标是什么。
-
除了充满拼写错误(有时参数名称是
inneParams有时是innerParam有时是innerParams)我认为您正在解决兄弟作用域的问题;也就是说,内部和外部实际上在范围层次结构中是并排的,而不是像这里假设的那样嵌套......我会验证这一点。 -
我为这些错误道歉。我已经把它们清理干净了
标签: javascript angularjs angularjs-directive angularjs-compile