在指令中,点击jQuery元素,我正在更新范围。但它不起作用。这样做的正确方法是什么?
angular.module('app.directives', []).directive('newContent', function() {
return {
link: function(scope, element, attrs) {
var title = element.find('h1'); //getting the element
scope.show = true;
var that = scope;
title.on('click', function(){
scope.show = false; //not working
})
}
}
})
答案 0 :(得分:1)
尝试使用scope.$apply
或更好地使用scope.$evalAsync
scope.$apply(function(){
scope.show = false;
})
var appModules = ['app.directives']
var app = angular.module('plunker', appModules);
app.controller('MainCtrl', function($scope) {
$scope.name = 'World';
});
angular.module('app.directives', []).directive('newContent', function() {
return {
link: function(scope, element, attrs) {
var title = element.find('h1');
scope.show = true;
var that = scope;
title.on('click', function(){
scope.$evalAsync(function() {
scope.show = false;
);
})
}
}
})

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="plunker" ng-controller="MainCtrl">
<p>Hello {{name}}!</p>
<div class="content" my-content>
<h1>My Content</h1>
</div>
<div class="content" new-content>
<h1>click me</h1>
<h2 ng-show="show">My Content</h2>
</div>
</div>
&#13;