Javascript 用于切换图元可见性的角度指令
我构建了一个将$rootScope.showContent值更改为true或false的指令 然后我使用ng show=“showContent”隐藏或显示元素 这种方法可以很好地工作,但我希望避免使用$rootScope和scope.apply()函数。 你能给我建议一个更好的方法吗 下面是一些代码: HTMLJavascript 用于切换图元可见性的角度指令,javascript,angularjs,rootscope,Javascript,Angularjs,Rootscope,我构建了一个将$rootScope.showContent值更改为true或false的指令 然后我使用ng show=“showContent”隐藏或显示元素 这种方法可以很好地工作,但我希望避免使用$rootScope和scope.apply()函数。 你能给我建议一个更好的方法吗 下面是一些代码: HTML <body ng-app="myApp"> <div ng-controller="AppCtr"> <hide-amounts
<body ng-app="myApp">
<div ng-controller="AppCtr">
<hide-amounts ></hide-amounts>
<div ng-show="showContent">
<h1>Hello from h1</h1>
<p>Hello from paragarapsh</p>
</div>
<div ng-show="showContent">
<h1>Hello from h1</h1>
<p>Hello from paragarapsh</p>
</div>
</div>
</body>
你好,来自h1
巴拉圭人你好
你好,来自h1
巴拉圭人你好
棱角分明
var myApp = angular.module('myApp', []);
myApp.run(function ($rootScope) {
$rootScope.showContent = true;
})
myApp.controller("AppCtr", function ($scope) {
})
.directive('hideAmounts',["$rootScope", function ($rootScope) {
return {
restrict: "E",
replace: true,
template: '<a href="#">Hide Content</a>',
link: function (scope, element, attrs) {
element.click(function () {
scope.$apply(function () {
$rootScope.showContent = !$rootScope.showContent;
})
return false;
})
}
};
}]);
var myApp=angular.module('myApp',[]);
myApp.run(函数($rootScope){
$rootScope.showContent=true;
})
myApp.controller(“AppCtr”,函数($scope){
})
.directive('hideAmounts',[“$rootScope”,function($rootScope){
返回{
限制:“E”,
替换:正确,
模板:“”,
链接:函数(范围、元素、属性){
元素。单击(函数(){
作用域:$apply(函数(){
$rootScope.showContent=!$rootScope.showContent;
})
返回false;
})
}
};
}]);
Jsfiddle link:(Jsfiddle不工作不知道为什么:p)老实说,定义指令只是切换父控制器上的标志不是个好主意 只用
<button ng-click="showContent = !showContent ">
相反
但是,如果您真的想摆脱og$rootScope,您可以:
1) 将参数传递给指令
var myApp=angular.module('myApp',[]);
myApp.controller(“AppCtr”,函数($scope){
$scope.obj={};
$scope.obj.showmounts=true;
$scope.showAmounts=true;
})
.directive('hideAmounts',[“$rootScope”,function($rootScope){
返回{
限制:“E”,
替换:正确,
作用域:{show:'='},
模板:“”,
链接:函数(范围、元素、属性){
元素。单击(函数(){
作用域:$apply(函数(){
scope.show=!scope.show;
})
返回false;
})
}
};
}]);
2) 通过在指令中调用$scope.emit('message',param)并在父控制器$scope.on('message,function(s,param){})上注册侦听器,将消息发送到父控制器。除非需要,否则避免使用隔离的作用域指令。在AngularJS 1.2.x之前,隔离作用域指令和普通指令并没有太大区别。但是使用1.2.x,他们改变了自己的行为。所以,我不得不改变我项目中的所有指令。因此,请确保,除非需要,否则您将使用then
var myApp = angular.module('myApp', []);
myApp.controller("AppCtr", function ($scope){
$scope.obj = {};
$scope.obj.showAmounts = true;
$scope.showAmounts = true;
})
.directive('hideAmounts', ["$rootScope", function ($rootScope) {
return {
restrict: "E",
replace: true,
template: '<a href="#">Hide Amounts</a>',
link: function (scope, element, attrs) {
element.click(function () {
scope.showAmounts = !scope.showAmounts;
scope.$apply();
})
}
};
}]);
var myApp=angular.module('myApp',[]);
myApp.controller(“AppCtr”,函数($scope){
$scope.obj={};
$scope.obj.showmounts=true;
$scope.showAmounts=true;
})
.directive('hideAmounts',[“$rootScope”,function($rootScope){
返回{
限制:“E”,
替换:正确,
模板:“”,
链接:函数(范围、元素、属性){
元素。单击(函数(){
scope.showAmounts=!scope.showAmounts;
作用域:$apply();
})
}
};
}]);
另一件事是您可以在指令中使用父范围(直到它不是一个独立的范围指令) 谢谢你的帮助!非常感谢:)
var myApp = angular.module('myApp', []);
myApp.controller("AppCtr", function ($scope){
$scope.obj = {};
$scope.obj.showAmounts = true;
$scope.showAmounts = true;
})
.directive('hideAmounts', ["$rootScope", function ($rootScope) {
return {
restrict: "E",
replace: true,
template: '<a href="#">Hide Amounts</a>',
link: function (scope, element, attrs) {
element.click(function () {
scope.showAmounts = !scope.showAmounts;
scope.$apply();
})
}
};
}]);