2016-05-13 80 views
0

我想在使用angularJS的HTML画布中创建一些圆圈。 我知道如何做到这一点使用JavaScript,但我是新的angularJS和任何帮助,非常感谢。使用AngularJS创建HTML画布元素

代码:

<title>Home Page</title> 

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.3/angular.min.js"></script> 



</head> 

<body> 

<div ng-app="myapp" ng-controller="myctrl"> 
<canvas id="canvas" width="2100" height="900" 
    style="border: 1px solid #d3d3d3;"> 
</canvas> 
</div> 
<script> 

var $scope; 
var app = angular.module('myapp', []); 
myapp.controller("myctrl", function($scope){ 
var c1 = document.getElementById("canvas"); 
var ctx = c1.getContext("2d"); 
ctx.beginPath(); 
ctx.arc(500, 500, 50, 0, 2 * Math.PI, false); 
ctx.lineWidth = 0.2; 
ctx.stroke(); 
ctx.fill(); 
}) 

</script> 
</body> 
+0

喜请击链接:https://github.com/ActivKonnect/angular-circles 也http://htmlpreview.github.io/?https://github.com/ActivKonnect/angular-circles/ blob/master/example/index.html –

+0

非常感谢您的帮助..但我想知道是否有办法处理我的代码。 –

回答

0

其实你的代码工作。主要问题是您尝试通过错误的变量访问您的角度应用程序(myapp而不是app)。这是运行你的代码的jsbin

但是更改控制器中的DOM是bad practice。使用directive来访问DOM对象。

我用指令创建了一个简单的example

app.directive('drawCircle', function() { 
return { 
    scope: { 
    x: '@x', 
    y: '@y' 
    }, 
    link: function(scope, element, attrs) { 
    var x = parseInt(scope.x); 
    var y = parseInt(scope.y); 
    var canvas = element.parent(); 
    var ctx = canvas[0].getContext("2d"); 
    ctx.beginPath(); 
    ctx.arc(x, y, 50, 0, 2 * Math.PI, false); 
    ctx.lineWidth = 0.2; 
    ctx.stroke(); 
    ctx.fill(); 
    } 
} 
}); 

该指令有两个参数来设置画布圆的位置:

<canvas id="canvas" width="2100" height="900" style="border: 1px solid #d3d3d3;"> 
    <draw-circle x="500" y="500"></draw-circle> 
    <draw-circle x="200" y="500"></draw-circle> 
</canvas> 

这将绘制在画布内两个圆圈。 希望这有助于。

+0

非常感谢...非常感谢.. :) –

+0

您忘记了在''标签中包含'drawCircle'。 –