【发布时间】:2014-05-29 07:17:27
【问题描述】:
我正在动态创建一个带角度的元素。当应用程序最初使用 app.run() 运行时,会创建元素并编译元素,在编译元素后我添加一个 ng-show="active" 以便我可以切换元素的可见性并可能稍后为过渡设置动画使用该指令。唯一的问题是编译的元素只有在看起来像变量 active 时才绑定。一旦设置为 true,它就不会再次隐藏。我是否需要使用摘要或其他方法才能使其绑定正常工作?
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
<script src="lib/angular/angular.min.js"></script>
<link rel="stylesheet" href="lib/bootstrap/dist/css/bootstrap.min.css" />
<style>
.message-app { width:100px; height:30px; background-color:#005cab; color:white; text-align:center; line-height:30px; margin-bottom:5px; }
.app-console { width:300px; height:30px; border:1px solid red; }
</style>
</head>
<body ng-controller="AppCtrl">
<div class="message-app" val=''>click</div>
<div class="message-app" val='true'>click</div>
</body>
</html>
<script>
var app = angular.module("messageApp", []);
app.run(function($rootScope){
$rootScope.message = angular.element("<div class='app-console' ng-show='active'></div>");
angular.element(document.body).append($rootScope.message);
})
function AppCtrl($scope, $compile, $rootScope){
$scope.active = false;
$compile($rootScope.message)($scope);
$scope.setActive = function(val){
$scope.active = val;
$scope.$apply();
}
}
app.directive("messageApp", function(){
return {
restrict:"C",
controller:"AppCtrl",
scope:{
val:"@"
},
link:function(scope, element, attr){
element.bind("click", function(){
scope.setActive(Boolean(scope.val));
})
}
}
})
angular.element(document).ready(function(){
angular.bootstrap(document.querySelector("html"), ["messageApp"])
})
</script>
为了简单起见,我没有将 js 放在单独的文件中。我做错了什么吗?
【问题讨论】:
-
您使用
.run()函数来设置dom 有什么特别的原因吗?为什么不对动态元素使用指令?
标签: javascript html angularjs angularjs-scope