Page 69 - AngularJS权威教程
P. 69

8.1  指令:自定义 HTML 元素和属性   49


                  3. 关于IE浏览器                                                                         1
                                                          ①
                  如果你正在使用IE浏览器,打开这个在线示例 。会发现尽管指令声明了两次,但只出现了
              一个链接。                                                                                  2

                  从技术上讲,可以通过在文档头部声明新的标签(查看第30章)来解决这个问题,但这样做
              的后果就是,当疏忽了一致性时会导致额外的问题。                                                                3
                  因此,好的经验法则就是始终用属性来声明指令(就像我们之前做的那样),这样会给以后
              带来方便。                                                                                  4
                  值得注意的一个例外是,扩展内置HTML标签,例如用AngularJS重载<a>、 <form>和<input>。
              这些场景不会导致浏览器的兼容性问题,因为它们本身就是浏览器所支持的标签。                                                   5

                  4. 表达式
                  由于指令可以用属性的形式调用,我们可能会好奇如果给属性赋值会发生什么:                                                6

                  <h1 ng-init="greeting='HelloWorld'">
                      The greeting is: {{ greeting }}                                                7
                  </h1>
                  在线示例:http://jsbin.com/IdUYexO/2/edit。
                                                                                                     8
                  我们将表达式greeting = 'Hello World'赋值给内置指令ng-init。在表达式中,我们将
              greeting属性的值设置为Hello World,然后计算花括号内的{{ greeting }}这个表达式的值。                             9

                  这两种情况都会在当前作用域中计算一个普通的JavaScript表达式。根据这个表达式放置的位
              置不同,当前作用域可以是AngularJS在应用启动时调用ng-app实例化的$rootScope,也可以是                                 10
              某个子作用域,比如某个控制器的作用域。
                    用表达式来声明指令                                                                       11

                  我们知道声明指令时既可以使用表达式,也可以不使用表达式。下面回顾一下几种合法的表
              达式声明:                                                                                  12

                  <my-directive="someExpression">
                  </my-directive>                                                                    13
                  <div my-directive="someExpression">
                  </div>
                  <div class="my-directive:someExpression">
                  </div>                                                                             14
                  <!-- directive: my-directive someExpression -->
                  这里有一个值得注意的问题,赋值给指令的表达式会在哪个环境中运行?要回答这个问题,                                           15
              首先要了解一个复杂但非常重要的概念,就是当前作用域,它由DOM周围嵌套的控制器提供。

                    当前作用域介绍                                                                         16
                  首先快速了解一下由DOM通过内置指令ng-controller提供的作用域。这个指令的作用是在
              DOM中创建一个新的子作用域:                                                                        17

                  <p>We can access: {{ rootProperty }}</p>
              ——————————                                                                             18
                 ① http://jsbin.com/IJAzUJE/1/edit
   64   65   66   67   68   69   70   71   72   73   74