Javascript AngularJS指令-编译不起作用
Javascript AngularJS指令-编译不起作用,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,ng单击无效。有人能帮助我,如何使用$compile 我创造了一个劫掠者 //main.js var-app=angular.module('myApp',['ngGrid']); 应用程序控制器('MyCtrl',函数($scope){ }) .directive('myDir',函数($compile){ 返回{ 限制:“CAE”, 链接:函数(范围、元素、属性){ var下拉列表=“”; dropdown+='; 下拉菜单+='; 下拉菜单+=''; //下拉菜单=$compile(下拉菜
ng单击
无效。有人能帮助我,如何使用$compile
我创造了一个劫掠者
//main.js
var-app=angular.module('myApp',['ngGrid']);
应用程序控制器('MyCtrl',函数($scope){
})
.directive('myDir',函数($compile){
返回{
限制:“CAE”,
链接:函数(范围、元素、属性){
var下拉列表=“”;
dropdown+=';
下拉菜单+=';
下拉菜单+='
';
//下拉菜单=$compile(下拉菜单)(范围);
元素。之后(下拉列表);
}
}
});
你们非常接近。使用$Compile
编译模板:
var app = angular.module('myApp', ['ngGrid']);
app.controller('MyCtrl', function($scope) {
$scope.doSomething = function(){
alert('d');
};
})
.directive('myDir', function($compile){
return {
restrict: 'CAE',
link: function(scope, element, attrs){
var dropdown = '';
dropdown += '<ul class="dropdown-menu pull-right" role="menu" aria-labelledby="'+ attrs.id +'">';
dropdown += '<li role="presentation"><a href="#" ng-click="doSomething()">Actions</a></li>';
dropdown += '</ul>';
var a_input = angular.element($compile(dropdown)(scope));
element.append(a_input);
}
}
});
var-app=angular.module('myApp',['ngGrid']);
应用程序控制器('MyCtrl',函数($scope){
$scope.doSomething=函数(){
警报('d');
};
})
.directive('myDir',函数($compile){
返回{
限制:“CAE”,
链接:函数(范围、元素、属性){
var下拉列表=“”;
dropdown+=';
下拉菜单+=';
下拉菜单+='
';
var a_input=angular.element($compile(dropdown)(scope));
元素。追加(a_输入);
}
}
});
演示
评论
AngularJS不知道有关
警报的信息。如果您想从HTML调用它,请像@udidu显示的那样覆盖它。您非常接近。使用$Compile
编译模板:
var app = angular.module('myApp', ['ngGrid']);
app.controller('MyCtrl', function($scope) {
$scope.doSomething = function(){
alert('d');
};
})
.directive('myDir', function($compile){
return {
restrict: 'CAE',
link: function(scope, element, attrs){
var dropdown = '';
dropdown += '<ul class="dropdown-menu pull-right" role="menu" aria-labelledby="'+ attrs.id +'">';
dropdown += '<li role="presentation"><a href="#" ng-click="doSomething()">Actions</a></li>';
dropdown += '</ul>';
var a_input = angular.element($compile(dropdown)(scope));
element.append(a_input);
}
}
});
var-app=angular.module('myApp',['ngGrid']);
应用程序控制器('MyCtrl',函数($scope){
$scope.doSomething=函数(){
警报('d');
};
})
.directive('myDir',函数($compile){
返回{
限制:“CAE”,
链接:函数(范围、元素、属性){
var下拉列表=“”;
dropdown+=';
下拉菜单+=';
下拉菜单+='
';
var a_input=angular.element($compile(dropdown)(scope));
元素。追加(a_输入);
}
}
});
演示
评论
AngularJS不知道有关警报的信息。如果要从HTML调用它,请像@udidu show那样重写它。当您使用ng click
ng click指令搜索当前范围内的表达式时。由于它们在指令的作用域(或其父作用域)上没有alert
函数,因此不会发生任何事情
您可以在示波器上添加警报
功能,如下所示:
.directive('myDir', function($compile){
return {
restrict: 'CAE',
link: function(scope, element, attrs){
// add the alert function on the scope
scope.alert = function(param) {
alert(param);
}
var dropdown = '';
dropdown += '<ul class="dropdown-menu pull-right" role="menu" aria-labelledby="'+ attrs.id +'">';
dropdown += '<li role="presentation"><a href="javascript:void(0);" ng-click="alert(\'a\')">Actions</a></li>';
dropdown += '</ul>';
dropdown = $compile(dropdown)(scope);
element.after(dropdown);
}
}
});
指令('myDir',函数($compile){
返回{
限制:“CAE”,
链接:函数(范围、元素、属性){
//在作用域上添加警报功能
scope.alert=函数(参数){
警报(参数);
}
var下拉列表=“”;
dropdown+=';
下拉菜单+=';
下拉菜单+='
';
下拉菜单=$compile(下拉菜单)(范围);
元素。之后(下拉列表);
}
}
});
使用ng click
ng click指令搜索当前范围内的表达式。由于它们在指令的作用域(或其父作用域)上没有alert
函数,因此不会发生任何事情
您可以在示波器上添加警报
功能,如下所示:
.directive('myDir', function($compile){
return {
restrict: 'CAE',
link: function(scope, element, attrs){
// add the alert function on the scope
scope.alert = function(param) {
alert(param);
}
var dropdown = '';
dropdown += '<ul class="dropdown-menu pull-right" role="menu" aria-labelledby="'+ attrs.id +'">';
dropdown += '<li role="presentation"><a href="javascript:void(0);" ng-click="alert(\'a\')">Actions</a></li>';
dropdown += '</ul>';
dropdown = $compile(dropdown)(scope);
element.after(dropdown);
}
}
});
指令('myDir',函数($compile){
返回{
限制:“CAE”,
链接:函数(范围、元素、属性){
//在作用域上添加警报功能
scope.alert=函数(参数){
警报(参数);
}
var下拉列表=“”;
dropdown+=';
下拉菜单+=';
下拉菜单+='
';
下拉菜单=$compile(下拉菜单)(范围);
元素。之后(下拉列表);
}
}
});
我会将单击功能拉到您的控制器中。控制器的作用域上没有警报
,因此它不会执行任何操作。此外,如果可能的话,我尽量避免使用大量嵌套引号。一个简单而干净的重构
var app = angular.module('myApp', ['ngGrid']);
app.controller('MyCtrl', function($scope) {
$scope.actionClick = function() {
alert("a");
}
})
.directive('myDir', function($compile){
return {
restrict: 'CAE',
link: function(scope, element, attrs){
var dropdown = '';
dropdown += '<ul class="dropdown-menu pull-right" role="menu" aria-labelledby="'+ attrs.id +'">';
dropdown += '<li role="presentation"><a href="javascript:void(0);" ng-click="actionClick()">Actions</a></li>';
dropdown += '</ul>';
dropdown = $compile(dropdown)(scope);
element.after(dropdown);
}
}
});
var-app=angular.module('myApp',['ngGrid']);
应用程序控制器('MyCtrl',函数($scope){
$scope.actionClick=function(){
警报(“a”);
}
})
.directive('myDir',函数($compile){
返回{
限制:“CAE”,
链接:函数(范围、元素、属性){
var下拉列表=“”;
dropdown+=';
下拉菜单+=';
下拉菜单+='
';
下拉菜单=$compile(下拉菜单)(范围);
元素。之后(下拉列表);
}
}
});
我会将单击功能拉到您的控制器中。控制器的作用域上没有
警报
,因此它不会执行任何操作。此外,如果可能的话,我尽量避免使用大量嵌套引号。一个简单而干净的重构
var app = angular.module('myApp', ['ngGrid']);
app.controller('MyCtrl', function($scope) {
$scope.actionClick = function() {
alert("a");
}
})
.directive('myDir', function($compile){
return {
restrict: 'CAE',
link: function(scope, element, attrs){
var dropdown = '';
dropdown += '<ul class="dropdown-menu pull-right" role="menu" aria-labelledby="'+ attrs.id +'">';
dropdown += '<li role="presentation"><a href="javascript:void(0);" ng-click="actionClick()">Actions</a></li>';
dropdown += '</ul>';
dropdown = $compile(dropdown)(scope);
element.after(dropdown);
}
}
});
var-app=angular.module('myApp',['ngGrid']);
应用程序控制器('MyCtrl',函数($scope){
$scope.actionClick=function(){
警报(“a”);
}
})
.directive('myDir',函数($compile){
返回{
限制:“CAE”,
链接:函数(范围、元素、属性){
var下拉列表=“”;
dropdown+=';
下拉菜单+=';
下拉菜单+='
';
下拉菜单=$compile(下拉菜单)(范围);
元素。之后(下拉列表);
}
}
});
请更新Plunker,没有关于Loopps的指令。。我错过了。plunker链接已更新。请更新plunker,没有关于Loopps.的指令。。我错过了。plunker链接已更新。感谢您的帮助。是<