Javascript 在何处定义AngularJS指令中的局部函数
我必须在指令中的何处定义我的函数button(),以便按下按钮将触发函数 我不想使用应用程序的外部范围,我只想使用本地范围Javascript 在何处定义AngularJS指令中的局部函数,javascript,angularjs,Javascript,Angularjs,我必须在指令中的何处定义我的函数button(),以便按下按钮将触发函数 我不想使用应用程序的外部范围,我只想使用本地范围 var-app=angular.module(“myApp”,[]); 应用指令('aaaa',函数(){ 返回{ 限制:'E', 范围:{ 数据:'=', //这不起作用:按钮:函数(){console.log('hello from button');} }, 链接:功能(范围、元素){ 元素append('hello'); 元素。追加('单击我!') } } });
var-app=angular.module(“myApp”,[]);
应用指令('aaaa',函数(){
返回{
限制:'E',
范围:{
数据:'=',
//这不起作用:按钮:函数(){console.log('hello from button');}
},
链接:功能(范围、元素){
元素append('hello');
元素。追加('单击我!')
}
}
});代码>
您可以在链接下退出
link: function(scope, element) {
element.append('hello');
element.append(' <button type="button" ng-click="button()">Click Me!</button> ');
scope.button=function(){
//content goes here
}
}
链接:功能(范围、元素){
元素append('hello');
元素。追加('Click Me!');
scope.button=函数(){
//内容在这里
}
}
正如@tymeJV所说,您需要首先编译html,然后在指令控制器中调用button()
var app = angular.module("myApp", []);
app.directive('aaaa', function($compile) {
return {
restrict: 'E',
scope: {
data: '=',
//this is not working: button: function(){console.log('hello from button');}
},
link: function(scope, element) {
element.append('hello');
var htmlText = ' <button type="button" ng-click="button()">Click Me!</button> ';
var template = angular.element($compile(htmlText)(scope));
element.append(template);
},
controller: function($scope, $element){
$scope.button = function(){
console.log('button clicked');
}
}
}
});
var-app=angular.module(“myApp”,[]);
应用指令('aaaa',函数($compile){
返回{
限制:'E',
范围:{
数据:'=',
//这不起作用:按钮:函数(){console.log('hello from button');}
},
链接:功能(范围、元素){
元素append('hello');
var htmlText='单击我!';
var template=angular.element($compile(htmlText)(scope));
元素。追加(模板);
},
控制器:函数($scope$element){
$scope.button=函数(){
log(“单击按钮”);
}
}
}
});
我建议使用角度模板而不是element.append,请参见下面的示例代码。那么你就不需要所有的编译代码了
您还可以替换“模板:”hello
var-app=angular.module(“myApp”,[]);
应用指令('aaaa',函数(){
返回{
限制:'E',
范围:{
数据:'='
},
链接:功能(范围、元素){
scope.button=函数(){
log('hello from button');
};
},
模板:“你好,点击我!”
}
});
好吧,你的ngClick
永远不会做任何事情。你不能仅仅附加一个HTML字符串并期望它被提取-使用$compile
服务签出以@tymeJV注入动态HTMLAgreeing-我认为你没有正确使用Angular指令。你最好使用一个模板,而不是附加链接函数,以及用于ng click的关联控制器。该链接实际上是用于设置任何在控制器中没有位置的DOM操作或侦听器。@对此,我只是一个mwe,在我的真实场景中,使用链接函数而不是templateFair是有意义的,那么选择的答案是正确的,我同意$compile
是处理此问题的正确方法。我必须在哪里定义函数?哦,我只是注意到您没有控制器。那么您可以在指令中定义控制器。让我更新我的答案为什么使用链接函数而不是控制器来定义scope.button函数?我看到了许多附加dom的答案,其中不是角度的方法:模板是。因此,我想展示一个示例,如何使用模板,而不让TS被一堆其他最佳实践压倒:-)我完全建议使用:-指令的控制器范围(this)而不是“scope”(使用此控制器函数而不是链接函数)-或者使用Angular 1.5的组件而不是指令,以便以后更容易迁移到ng2。有关这些主题的更多信息,请搜索“directive controllerAs”/“Angular 1.5组件”