Angularjs 角度指令范围与替换值的工作方式不同
我有一个指令,其源代码如下所示:Angularjs 角度指令范围与替换值的工作方式不同,angularjs,angularjs-directive,angularjs-scope,Angularjs,Angularjs Directive,Angularjs Scope,我有一个指令,其源代码如下所示: var app = angular.module("myApp", ["mytemplate.html"]) var thai = angular.module("mytemplate.html", []).run(['$templateCache', function ($templateCache) { $templateCache.put('mytemplate.html', '<ul ng-if="true"> <li&g
var app = angular.module("myApp", ["mytemplate.html"])
var thai = angular.module("mytemplate.html", []).run(['$templateCache',
function ($templateCache) {
$templateCache.put('mytemplate.html', '<ul ng-if="true"> <li> <a ng-click="next()" href="javascript:void(0)">»</a> </li> </ul>');
}
]);
thai.directive('myTop',function() {
return {
restrict: 'A',
replace: false,
scope: {
},
templateUrl: 'mytemplate.html',
link: function (scope) {
scope.next = function () {
alert('Hello!');
};
}
}
});
var-app=angular.module(“myApp”,[“mytemplate.html”])
var thai=angular.module(“mytemplate.html”,[])。运行(['$templateCache',”,
函数($templateCache){
$templateCache.put('mytemplate.html',';
}
]);
thai.directive('myTop',function(){
返回{
限制:“A”,
替换:false,
范围:{
},
templateUrl:'mytemplate.html',
链接:功能(范围){
scope.next=函数(){
警惕(“你好!”);
};
}
}
});
这是你的电话号码
当我点击“>>”按钮时,它工作正常(提示“你好”)。但是,如果我将指令中的replace
值从false
更改为true
(并单击FIDLE中的更新代码),警报将不再工作
我以为这个范围是分离的,但我不知道为什么?你能告诉我这里的原因吗?非常感谢 您在锚中为href分配的javascript函数就是问题所在。无论此处的“替换”值如何,它都有效
为什么这会阻止它工作,我不完全确定。但是对于锚,您可以正常地说
href=“”
或href=“#”
。如果您设置范围:false
,它将解决您的问题
thai.directive('myTop',function() {
return {
restrict: 'A',
replace: false,
scope: false,
templateUrl: 'mytemplate.html',
link: function (scope) {
scope.next = function () {
alert('Hello!');
};
}
}
});
您有
作用域:{}
,它创建了一个隔离作用域。这导致模板中的ng if
指令出现问题。否,您已将ng if条件从ul移动到标签。如果您更改href但不更改ng If条件,则它不起作用。是否有理由使用ng If
条件?我一定是认为它是错误的,或者是在试图找到解决方案时留下的,所以才把它删除了。我是故意这么做的。因为这只是一个演示,所以我倾向于阅读。例如,除了- 之外,我们还有许多
- ,if条件对整个
- 标记产生影响,而不仅仅是
- 标记。我认为隔离范围与指令配合得很好。正如我所描述的,如果我使用的隔离范围和替换值为false,它仍然工作得很好。您想实现什么?在与
指令共享作用域的元素上,为什么需要具有ng if
和replace:true
的指令?你能用scope:{}
来代替吗?谢谢@georgeawg实际上,我想用指令来处理一些参数,但这只是演示,所以我让它成为最简单的例子。我认为替换和范围没有关系。这里是属性指令,所以我认为replace=true只需将指令的整个模板更改为控制器模板中的我的div。正确:ng show
&隔离范围在很大程度上是互斥的(除了那些声明其他指令参数的实例。replace
意味着它将替换声明它的DOM元素。如果指令依赖于其他属性,则需要以某种方式复制它们或手动替换。我不建议在大多数美国使用replace=true
)e例。replace=true
- 标记。我认为隔离范围与指令配合得很好。正如我所描述的,如果我使用的隔离范围和替换值为false,它仍然工作得很好。您想实现什么?在与