$scope.$apply()没有调用函数
$scope.$apply() not calling function
我需要一个自定义的点击指令,它使用scope.$apply()执行传递的代码。
$(elem).on('click', function(){
scope.$apply(attrs.wdClick);
});
如果我传递像wd-click="something = !something"这样的东西,效果很好。但是当我尝试调用$rootScope函数时,它不起作用,但是当使用默认的ng-click时,它确实起作用。
wd-click="$root.someFunction()" //this does not call the function but ng-click does
我已经尝试更新指令,使其工作
$(elem).on('click', function(){
$rootScope.$apply(attrs.wdClick);
});
但这也不起作用。什么好主意吗?
attrs.wdClick
是一个字符串,因此将其传递给$apply
不会做任何事情。要调用该函数,可以将字符串传递给$eval
scope.$apply(function() {
scope.$eval(attrs.wdClick)
});
你应该用function(){}来包装你的代码
scope.$apply(function(){
attrs.wdClick() // this is some sunction I suppose
});
您想在另一个控制器中调用您的rootscope方法吗?如果我理解正确的话,试着这样使用:
angular.module('app', [])
.controller('Ctrl', function Ctrl1($scope, $rootScope) {
$rootScope.blah = 'Hello';
$scope.yah = 'World'
})
.directive('myTemplate', function() {
return {
restrict: 'E',
templateUrl: 'my-template.html',
scope: {},
controller: ["$scope", "$rootScope", function($scope, $rootScope) {
console.log($rootScope.blah);
console.log($scope.yah);
$scope.test = function(arg) {
console.log(arg);
}
}]
};
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js"></script>
<div ng-app="app">
<div ng-controller="Ctrl">
<my-template></my-template>
</div>
<!-- my-template.html -->
<script type="text/ng-template" id="my-template.html">
<label ng-click="test($root.blah)">Click</label>
</script>
</div>
你也可以试一试。http://jsfiddle.net/mg74b/24/
您尝试使用attrs而不是scope属性是有原因的吗?此外,您应该使用$timeout而不是$apply。
angular
.module('app', [])
.directive('myDirective', myDirective);
myDirective.$inject = ['$timeout'];
function myDirective($timeout) {
return {
restrict: 'E',
templateUrl: 'my-template.html',
scope: {
wdClick: '='
},
link: linkFn
};
function linkFn(scope, element) {
element.on('click', function () {
$timeout(scope.wdClick);
});
}
}
相关文章:
- 如何从模块链中调用函数.导出到节点中
- 调用函数内部的函数
- 在javascript中调用c函数
- DropDownListFor赢得't在更改时调用函数
- Javascript页面调用函数
- 在动画结束之前调用函数
- 允许父窗口在其不同域的子iframe上调用函数
- 运行Infinite Scroll后调用函数时出现问题
- JavaScript:在调用函数的文本输入上按enter键
- 使用大括号和不使用bracs调用函数的区别
- javascript在事件上调用函数
- 从index.html调用函数,该函数无限循环
- 从带参数的字符串变量调用函数中的函数
- 为什么 JS 不在滚动时调用函数
- 是否可以在不更改上下文的情况下调用函数.apply
- 如何在ES6类中使用参数调用函数
- AngularJS:调用函数时编号不更新
- JavaScript中的立即调用函数表达式(IIFE)-传递jQuery
- 在JavaScript中调用函数时自定义此选项
- 调用函数中声明的变量