GVKun编程网logo

angularjs – 在angular指令中放置辅助函数的位置?(angular内置指令)

12

在本文中,您将会了解到关于angularjs–在angular指令中放置辅助函数的位置?的新资讯,同时我们还将为您解释angular内置指令的相关在本文中,我们将带你探索angularjs–在angu

在本文中,您将会了解到关于angularjs – 在angular指令中放置辅助函数的位置?的新资讯,同时我们还将为您解释angular内置指令的相关在本文中,我们将带你探索angularjs – 在angular指令中放置辅助函数的位置?的奥秘,分析angular内置指令的特点,并给出一些关于angularjs – $location.path在Angular指令中不起作用、angularjs – Angular指令 – 当另一个指令也作为隔离范围时更新父范围、angularjs – Angular指令,属性更新时不调用的链接、angularjs – Angular指令compile()函数如何访问隔离范围?的实用技巧。

本文目录一览:

angularjs – 在angular指令中放置辅助函数的位置?(angular内置指令)

angularjs – 在angular指令中放置辅助函数的位置?(angular内置指令)

我创建了一个简单的指令:

angular.module("foo").directive('bar',function(){
    return {
        ...
        template:
            '<div> \
                <div ng-hide="param1.length == 0 && param2...">...</div> \
                <input ng-show="param1.length == 0 && param2..." .../> \
             </div>',scope: {
            param1: '=',param2: '='
        }
    };
});

但是模板中有一个复制的复杂逻辑,所以我想把它提取到一个函数中,然后从模板中调用该函数.我在哪里可以放这样的功能,我该如何调用它?我是否必须创建专用控制器?

解决方法

在链接功能中:

return {
    ...,template: '<div><div ng-hide="foo()">...</div></div>',link: function(scope) {
        scope.foo = function() {
            return scope.param1.length == 0 && ...;
        };
    }
};

angularjs – $location.path在Angular指令中不起作用

angularjs – $location.path在Angular指令中不起作用

我正在尝试从AngularJS指令中更新$location.path.它没有按照我的预期工作,即更新浏览器窗口中显示的URL并在我的页面上显示不同的内容.我的函数肯定会被调用正确的值,如控制台中所示.我认为$location.path可能会产生一些影响,因为当我点击链接时,会调用一些在新页面上调用的附加函数,只会显示新页面.当我在控制器中使用$location.path时,它按预期工作,但不在我的指令中.

这是我的指令的HTML:

<div detail-link="/comments?post={{post.postId}}" ng-click="clickDetailLink()"></div>

这是指令的定义(在CoffeeScript中):

directives.directive 'detailLink',['$location',($location) ->
    return (scope,element,attrs) ->
        scope.clickDetailLink = ->
            console.log "loading " + scope.detailLinkHref
            $location.path scope.detailLinkHref

        attrs.$observe 'detailLink',(value) ->
            console.log "set detail link to " + value
            scope.detailLinkHref = value
]

我知道这里发生了什么……我的$routeProvider设置为处理/注释但在这里我试图将一个查询字符串附加到路由.如果我使用常规< a href =“#/ comments?post = {{post.postId}}”>,这样可以正常工作,但不知何故通过$location.path设置相同的路由是行不通的.这与代码是否在控制器或指令中无关.

尝试范围.$apply? (注意$)

angularjs – Angular指令 – 当另一个指令也作为隔离范围时更新父范围

angularjs – Angular指令 – 当另一个指令也作为隔离范围时更新父范围

我编写了一个需要更新父作用域的angular指令.
angular.module('app').directive('googlePlace',function () {
    return {
        restrict: 'A',require: 'ngModel',link: function ($scope,element,attributes,model) {

              $scope.property1 = 'some val';
              $scope.property2 = 'another val'; 
              $scope.$apply();

    };
});

但在我的控制器中我这样做:

MyCtrl = function($scope){
$scope.doSave = function(){
   // do some logic
   console.log($scope.property1);
   console.log($scope.property2);


}

}

当doSave运行时,我在控制台中得到未定义的值.如何在不隔离范围的情况下将其应用于父节点范围.我没有此选项,因为同一元素上的另一个指令隔离了作用域.

它应该工作.默认情况下,如果未在指令中指定范围,则使用父范围,因此应设置property1和property2.尝试将指令中的范围设置为false.作为旁注并不是一个好的做法,你在做什么.最好隔离范围并将属性添加为属性.这样你就会有很好的封装.

例如

angular.module('app').directive('googlePlace',scope: {
            property1: '=',property2: '='
        }
        link: function ($scope,model) {

            //here you have access to property 1 and 2

    };
});

function MyCtrl($scope) {
    $scope.property1 = null;
    $scope.property2 = null;

    $scope.doSave = function(){
   // do some logic
       console.log($scope.property1);
       console.log($scope.property2);
    }
}

还有你的HTML

<div ng-control="MyCtrl">
<div google-place property1='property1' property2='property2'></div>
</div>

angularjs – Angular指令,属性更新时不调用的链接

angularjs – Angular指令,属性更新时不调用的链接

在以下示例中: http://plnkr.co/edit/OZjg6sUgl35GIriaabQg?p=preview

我有2个指令,showCard一个在ng-repeat中,链接函数在属性更新时被调用. (见控制台)

另一个showCards正常工作,但更新属性时不调用链接函数,但在开头只调用一次.

我想了解这两种之间的区别.

链接函数每个元素只调用一次,因此无论何时添加新卡,ngRepeat-directive都会添加一个新的< show-card ...>这将调用链接功能.

如果你想在每次更换卡片时触发某些功能,你可以在showCards链接功能的示波器上添加$watch功能,如下所示:

$scope.$watch('cards',function(){
     console.log('multi',$scope.cards);
   },true);

angularjs – Angular指令compile()函数如何访问隔离范围?

angularjs – Angular指令compile()函数如何访问隔离范围?

我有以下指令:

angular.module("example_module",[])
.directive("mydirective",function() {
  return {
    scope: { data: "@mydirective" }
    compile: function(element) {
      element.html('{{example}}');
      return function($scope) {
        $scope.example = $scope.data + "!";
      };
    }
  };
});

和以下HTML代码:

<!DOCTYPE html>
<html ng-app="example_module">
  <head>
    <Meta charset="utf-8">
    <title>Example title</title>
    <script src="lib/angular/angular.min.js"></script>
    <script src="js/example.js"></script>
  </head>
  <body>
    <div mydirective="Hello world"></div>
  </body>
</html>

我希望该指令编译为Hello world!,但它编译为空字符串.范围创建了一个孤立的范围,似乎无法达到{{example}}.

我想知道compile()创建的新HTML代码如何访问链接函数$​​scope.

解决方法

这不起作用,因为{{example}}正在针对父作用域进行评估,这是有道理的,因为您实际上是在编译之前将元素更改为:

<div>{{example}}<div>

您可以通过将’$scope.example =’替换为’$scope.$parent.example =’进行验证(仅用于演示目的 – 使用$parent不是最佳做法).

你真正想要做的是类似于翻译,但有更简单的方法来做到这一点.例如:

angular.module("example_module",function() {
  return {
    restrict: 'A',scope: { data: "@mydirective" },template: '{{example}}',compile: function(element) {
      return function($scope) {
        console.log($scope.data);
        $scope.example = $scope.data + "!";
        console.log($scope.example);
      };
    }
  };
});

当您使用模板时,它将替换应用该指令的元素的内容(除非您使用replace:true,在这种情况下它将替换整个元素),并且将根据指令范围评估模板的内容.

您可以使用传递给compile(see the docs)的transclude参数来执行您要执行的操作,但这已被弃用,因此我不建议沿着这条路前进.

Here’s a Plunk你可以玩一些变化.

今天关于angularjs – 在angular指令中放置辅助函数的位置?angular内置指令的介绍到此结束,谢谢您的阅读,有关angularjs – $location.path在Angular指令中不起作用、angularjs – Angular指令 – 当另一个指令也作为隔离范围时更新父范围、angularjs – Angular指令,属性更新时不调用的链接、angularjs – Angular指令compile()函数如何访问隔离范围?等更多相关知识的信息可以在本站进行查询。

本文标签: