我有一个角度应用程序,它在桌面浏览器上运行正常。但是在我尝试在android chrome上打开它之后,ng-click
很少工作。点击100次后,它可能会起作用并触发点击。在分析了我得到原因的代码后,我创建了一个js文件来创建新的angular指令:
var app;
var getOnTouchEndEventName = function () {
var isTouchSupported = "ontouchend" in document;
if (isTouchSupported) {
return "touchend";
} else {
return "mouseup";
}
};
var getOnTouchStartEventName = function () {
var isTouchSupported = "ontouchend" in document;
if (isTouchSupported) {
return "touchstart";
} else {
return "mousedown";
}
};
app.directive("ngPressstart", [function () {
return function (scope, elem, attrs) {
elem.bind(getOnTouchStartEventName(), function (e) {
e.preventDefault();
e.stopPropagation();
scope.$apply(attrs["ngPressstart"]);
});
}
}]);
app.directive("ngPressend", [function () {
return function (scope, elem, attrs) {
elem.bind(getOnTouchEndEventName(), function (e) {
e.preventDefault();
e.stopPropagation();
scope.$apply(attrs["ngPressend"]);
});
}
}]);
因此有两个指令:ng-pressstart
和ng-pressend
,目的是为移动和桌面浏览器使用一个指令。例如,如果它的移动设备然后getOnTouchEndEventName()
将返回touchend。否则为mouseup
。
修复此实施的方法是什么?
即使我没有使用这些指令,也会出现问题。
答案 0 :(得分:0)
正如我在评论中所述,此文件开头的声明不是angular的正确语法。通过在此文件中声明bool theFunction()
{
FILE* pPipe;
char buffer[1000];
if( (pPipe = _popen("dir", "rt")) == NULL )
{
return false;
}
while(fgets(pipeBuffer, maxBufferSize, pPipe))
{
printf(pipeBuffer);
}
// The fact that you have to close it here in the middle of nowhere
// should ring a bell that you need to think about separation of concern
_pclose(pPipe);
if( (pPipe = _popen("cls", "rt")) == NULL )
{
return false;
}
_pclose(pPipe);
return true;
}
,您无意中导致名称冲突。
向角度模块添加组件的正确方法是使用模块getter语法。
以角色管理模块的推荐方法是根本不使用变量。 https://github.com/johnpapa/angular-styleguide#style-y021
例如,在声明角度应用时,而不是执行:
var app;
你可以简单地使用:
var app = angular.module('game1', []);
在声明组件(控制器,指令,过滤器等)时,您可以使用链接getter语法。 https://github.com/johnpapa/angular-styleguide#style-y022
angular.module('game1', []);
这可确保您永远不会发生命名冲突,并使您的代码更具可读性。