1

新的角度。试图理解做事的正确方法

我正在尝试创建一个指令,当用户在移动到下一页之前单击链接时将运行自定义逻辑。但是,在我什至可以访问自定义逻辑之前,我很难设置指令。我希望能够:

A) 指令上的某些属性是可选的(在某些情况下设置为不同的默认值)

B)让用户能够将字符串文字或变量从控制器的范围传递到指令的属性中,以在指令的范围内使用。

我的问题:

1.) 如果我在指令的属性中使用字符串文字,则相应的 $scope 属性未定义。我必须通过 $attrs 访问它。这不是最糟糕的事情,但必须检查 $scope.Prop 并且如果它未定义检查 $attrs.Prop 似乎是错误的做法。

2.)此外,这个答案似乎说我需要在属性中使用字符串文字时使用单引号,但这种行为在我的示例中不起作用。

3.) 当我没有设置指令的某些属性时,我在指令的“控制器”函数中设置的 $scope 上的默认值在渲染时不会反映。我不知道为什么。

Plnkr 中的代码

任何帮助,将不胜感激!

4

2 回答 2

4

是所有三种情况都有效的版本:

  1. 文字工作没有任何特别之处
  2. 范围值使用通常的{{ expression }}语法工作
  3. href='{{strHref || 'default href'}}'使用我在这个线程中找到的语法在指令的模板中提供了默认值。

这是完整的指令定义:

return {
    restrict: 'E',
    replace: true,
    scope: {
        strHref: '@link',
        strText: '@displayText',
    },
    template: '<div><div>variables: {{strHref || \'default href\'}}, {{strText || \'default text\'}}</div> result: <a href="{{strHref || \'default href\'}}">{{strText || \'default text\'}}<span ng-show="blnIsBackButton"> (Return)</span></a></div>',

}; 

链接: http: //plnkr.co/edit/RB6shHI0xYa1FkP4eXDy

于 2013-07-24T23:53:59.650 回答
0

范围 & 可用于文字 / 表达式。Scope = 用于设置 2 路绑定和 scope = 用于方法调用。如果需要,您可以在控制器中设置属性的默认值

我认为指令名称必须小写。有人可以证实这一点吗?如果我使用 pageLink 它不起作用,但适用于 pagelink。(注“L”)。财产也一样。

http://www.egghead.io/中有一些关于范围的精彩视频。

我在Plunker中创建了它,它使用了所有 3 种范围隔离类型

于 2013-07-25T05:08:33.247 回答