Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS Linky过滤器停止旋转_Javascript_Onclick_Angularjs_Stoppropagation - Fatal编程技术网

Javascript AngularJS Linky过滤器停止旋转

Javascript AngularJS Linky过滤器停止旋转,javascript,onclick,angularjs,stoppropagation,Javascript,Onclick,Angularjs,Stoppropagation,我有一个span标签,看起来像这样: <span ng-bind-html="item.Name | linky" ng-click="open(item)"></span> 在一段时间内重复 但是我有一个问题,如果item.Name包含电子邮件或链接,linky过滤器会更改html并插入锚定标记。现在,当我单击链接时,ng click会触发,锚会打开,但我只希望锚会打开并阻止调用ng click…这可能吗?我不知道这是否有效,但请尝试一下 向open函数中添加一个

我有一个
span
标签,看起来像这样:

<span ng-bind-html="item.Name | linky" ng-click="open(item)"></span>

在一段时间内重复


但是我有一个问题,如果
item.Name
包含电子邮件或链接,linky过滤器会更改html并插入锚定标记。现在,当我单击链接时,ng click会触发,锚会打开,但我只希望锚会打开并阻止调用ng click…这可能吗?

我不知道这是否有效,但请尝试一下

向open函数中添加一个参数,并将
这个
作为当前dom元素的指针传递

<span ng-bind-html="item.Name | linky" ng-click="open(item,this)"></span>
因此,将调用该方法,但如果它是锚标记,则将返回false


这可能不是您想要的,但它会满足您的目的:)

对于您的html,类似这样的内容如何:

<span ng-bind-html="item.Name | linky" ng-click="open(item, $event)"></span>

也许有更好的办法,但我相信这会奏效。虽然它在我看到的
$事件中。

使用指令如何

app = angular.module("myModule", ["ngSanitize"])
    .directive('linkyDir', function() {
        return {
            restrict: 'E',
            replace: true,
            scope: { item: '=' },
            template: '<span ng-bind-html="item.Name | linky", ng-click="open(item)"></span>',
            controller: function($scope, $element) {
                $scope.open = function(item) {
                    if ($element[0].firstChild.tagName !== "A") {
                        console.log("Not an anchor");
                    } 
                    else {
                        console.log("Is an anchor tag");
                    }
                }
            }
        };
    })
app=angular.module(“myModule”[“ngSanitize”])
.directive('linkyDir',function(){
返回{
限制:'E',
替换:正确,
作用域:{item:'='},
模板:“”,
控制器:函数($scope$element){
$scope.open=功能(项){
if($element[0].firstChild.tagName!=“A”){
控制台日志(“非锚”);
} 
否则{
log(“是锚定标记”);
}
}
}
};
})
用“E”这个词,你会这样称呼它

<p ng-repeat="item in items">
    <linky-dir item="item"></linky-dir>
</p>


似乎不起作用
始终是跨度,因此永远不会有href属性,但您说过linky会更改html并放置锚定标记是的锚定标记位于跨度内。这就是ng bind html的工作原理。它将值放在范围内,linky重构HTML以包含锚定。最终的html看起来像
,所以将
这个
放在span上永远不会通过javascript的锚。好的,我对angularJs不太了解,谢谢你的解释。我已经编辑了我的函数,试试看:)嗨!您知道这些单击回调的调用顺序吗?在span之前抛锚?谢谢你这么做!
app = angular.module("myModule", ["ngSanitize"])
    .directive('linkyDir', function() {
        return {
            restrict: 'E',
            replace: true,
            scope: { item: '=' },
            template: '<span ng-bind-html="item.Name | linky", ng-click="open(item)"></span>',
            controller: function($scope, $element) {
                $scope.open = function(item) {
                    if ($element[0].firstChild.tagName !== "A") {
                        console.log("Not an anchor");
                    } 
                    else {
                        console.log("Is an anchor tag");
                    }
                }
            }
        };
    })
<p ng-repeat="item in items">
    <linky-dir item="item"></linky-dir>
</p>