Angularjs paper.js angular.js画布仅在画布鼠标上方更新
我已经用angular.js设置了一个应用程序。我正在通过ng repeat创建菜单。每个链接都调用一个指令中的函数,该指令使用paper.js将文本绘制到画布 但画布不会更新,直到我在浏览器周围移动鼠标。绘制到画布上的函数会立即调用,但是如果鼠标不离开链接,画布将什么也不会显示 angular.js控制器,用于在指令内调用draw函数:Angularjs paper.js angular.js画布仅在画布鼠标上方更新,angularjs,paperjs,Angularjs,Paperjs,我已经用angular.js设置了一个应用程序。我正在通过ng repeat创建菜单。每个链接都调用一个指令中的函数,该指令使用paper.js将文本绘制到画布 但画布不会更新,直到我在浏览器周围移动鼠标。绘制到画布上的函数会立即调用,但是如果鼠标不离开链接,画布将什么也不会显示 angular.js控制器,用于在指令内调用draw函数: .controller('NavCtrl', function($scope, $location, $http, WorkService) { $sco
.controller('NavCtrl', function($scope, $location, $http, WorkService) {
$scope.works = [];
$http({method: 'GET', url: '/api/v1/work'}). //collects all works
success(function(data, status, headers, config) {
$scope.works = data.objects;
});
$scope.setTitle = function(work) {
$scope.currentTitle=work.title;
$scope.writeTitle(work.title);
};
})
angular.js指令:
.directive('draw', function () {
return {
restrict: 'A',
link: function postLink($scope, element, attrs) {
$scope.writeTitle = function(inText){
var letters = inText.split('');
for(var i=0; i<2; i++){
var text = new PointText(new Point(getRandom(0, 200), getRandom(0, 100)));
text.content = letters[i];
text.style = {
fontFamily: 'Arial',
fontWeight: 'normal',
fontSize: 14,
fillColor: 'red',
justification: 'center'
};
}
}
function getRandom(min, max) {
return Math.random() * (max - min) + min;
}
function initPaper() {
paper.install(window);
paper.setup('canvas');
}
initPaper();
}
};
});
指令('draw',函数(){
返回{
限制:“A”,
链接:函数postLink($scope,element,attrs){
$scope.writeTitle=函数(inText){
变量字母=内部文本拆分(“”);
对于(var i=0;i将代码包装在
范围内的指令函数中。$apply()
函数。这将确保它更新UI
还有一件事,它是指令中用于使用范围的约定(无美元符号)而不是$scope
。在控制器中,您实际传递的是命名对象$scope。Angular需要知道要注入的对象的实际名称。但是,在指令的链接函数中,实际名称并不重要。这是因为在链接属性中,参数是按特定顺序传递的:范围、元素、属性
。如果需要,可以使用foo、bar、baz
,但它们仍将解析为范围、元素、属性
考虑到这一点,您实际上可以使用$scope
,但要意识到,您可以这样做只是因为它在函数参数列表中的顺序
link: function postLink(scope, element, attrs)
scope.writeTitle = function(inText){
scope.$apply(function () {
var letters = inText.split('');
for(var i=0; i<2; i++){
var text = new PointText(new Point(getRandom(0, 200), getRandom(0, 100)));
text.content = letters[i];
text.style = {
fontFamily: 'Arial',
fontWeight: 'normal',
fontSize: 14,
fillColor: 'red',
justification: 'center'
};
});
}
link:函数postLink(范围、元素、属性)
scope.writeTitle=函数(inText){
作用域:$apply(函数(){
变量字母=内部文本拆分(“”);
对于(var i=0;i您是否尝试过更新视图?
我在Firefox和IE11上遇到了一个问题,在我启动一些操作后,鼠标悬停,画布才更新
我只是在每个函数结束时调用了paper.view.update()
,结果一切正常
如果这是问题所在,则与Angular无关请提供您遇到问题的代码。好的。我已使用该代码编辑了我的帖子。只有当我将鼠标移到画布上时,画布才会更新。我发现在两种情况下,画布才会更新。一种是鼠标光标移到画布上时,另一种是鼠标移到画布上时光标位于body元素周围的页边距上……您可以发布用于应用“绘图”的HTML代码吗指令?这个提琴有用吗?我得到了错误:$rootScope:inprog操作已经在进行中,我已经发现我不能做内置的点和大小数学运算。paper.js文档说,如果将纸张与纯js一起使用,这是预期的行为。但是我可以在没有纸张前缀的情况下实现任何事情……我很困惑。我是不是使用paperscript还是普通js?
<script type="text/paperscript" canvas="canvas">
function onFrame(event) {
}
</script>
link: function postLink(scope, element, attrs)
scope.writeTitle = function(inText){
scope.$apply(function () {
var letters = inText.split('');
for(var i=0; i<2; i++){
var text = new PointText(new Point(getRandom(0, 200), getRandom(0, 100)));
text.content = letters[i];
text.style = {
fontFamily: 'Arial',
fontWeight: 'normal',
fontSize: 14,
fillColor: 'red',
justification: 'center'
};
});
}