请教一个angularjs中在指令调用controller方法的问题
2个回答
2016-03-23 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:117538
获赞数:517196
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。
向TA提问 私信TA
关注
展开全部
你需要把scope.myClick parse成一个function, 然后再调用它。
var fn = $parse(scope.myClick); //parse it as function
fn('123') //call the function.
你可以参照一个rightClick directive 的写法:
.directive("rightclick", ['$parse', function($parse, $scope) {
return {
restrict: 'A',
transclude: true,
scope:{
'rightclick': '&rightclick'
},
link: function(scope, element, attrs) {
element.bind('contextmenu', function(event) {
var fn = $parse(scope.rightclick); //parse it as function
scope.$apply(function() {
event.stopPropagation();
event.preventDefault();
fn();
});
});
}
};
}])
var fn = $parse(scope.myClick); //parse it as function
fn('123') //call the function.
你可以参照一个rightClick directive 的写法:
.directive("rightclick", ['$parse', function($parse, $scope) {
return {
restrict: 'A',
transclude: true,
scope:{
'rightclick': '&rightclick'
},
link: function(scope, element, attrs) {
element.bind('contextmenu', function(event) {
var fn = $parse(scope.rightclick); //parse it as function
scope.$apply(function() {
event.stopPropagation();
event.preventDefault();
fn();
});
});
}
};
}])
2016-03-23 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
关注
展开全部
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
<script src="angular.min.js"></script>
<script>
var myApp = angular.module("myApp", []);
myApp.directive('testIt',function(){
return {
restrict: 'A',
scope: false,
link:function(scope, elm, attr){
if(scope.$last){
elm.css('color','red');
scope.myFunction();
}
}
}
});
myApp.controller("testCtrl", function($scope){
$scope.items = [0,1,2,3,4];
$scope.myFunction = function(){
console.log('Hello!');
};
});
</script>
</head>
<body>
<div ng-app="myApp">
<div ng-controller="testCtrl">
<ul>
<li ng-repeat="item in items" test-it >{{item}}</li>
</ul>
</div>
</div>
</body>
</html>
主要在于12行的scope:false,这个是默认的,其实你不写也是false。这样drective继承了父scope,所以可以调用父作用域的方法,而声明新的scope即scope:{}形式就不会继承了,不过你依然可以用scope.$parent.myFunction()的方式调用。
<html>
<head>
<meta charset="utf-8">
<title>test</title>
<script src="angular.min.js"></script>
<script>
var myApp = angular.module("myApp", []);
myApp.directive('testIt',function(){
return {
restrict: 'A',
scope: false,
link:function(scope, elm, attr){
if(scope.$last){
elm.css('color','red');
scope.myFunction();
}
}
}
});
myApp.controller("testCtrl", function($scope){
$scope.items = [0,1,2,3,4];
$scope.myFunction = function(){
console.log('Hello!');
};
});
</script>
</head>
<body>
<div ng-app="myApp">
<div ng-controller="testCtrl">
<ul>
<li ng-repeat="item in items" test-it >{{item}}</li>
</ul>
</div>
</div>
</body>
</html>
主要在于12行的scope:false,这个是默认的,其实你不写也是false。这样drective继承了父scope,所以可以调用父作用域的方法,而声明新的scope即scope:{}形式就不会继承了,不过你依然可以用scope.$parent.myFunction()的方式调用。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询