Javascript 在何处定义AngularJS指令中的局部函数

Javascript 在何处定义AngularJS指令中的局部函数,javascript,angularjs,Javascript,Angularjs,我必须在指令中的何处定义我的函数button(),以便按下按钮将触发函数 我不想使用应用程序的外部范围,我只想使用本地范围 var-app=angular.module(“myApp”,[]); 应用指令('aaaa',函数(){ 返回{ 限制:'E', 范围:{ 数据:'=', //这不起作用:按钮:函数(){console.log('hello from button');} }, 链接:功能(范围、元素){ 元素append('hello'); 元素。追加('单击我!') } } });

我必须在指令中的何处定义我的函数button(),以便按下按钮将触发函数

我不想使用应用程序的外部范围,我只想使用本地范围

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组件”