angularjs - 在 AngularJS 中创建子作用域的指令

标签 angularjs angularjs-directive

在创建复杂的表单时,我发现需要将 View 的某些部分分成不同的子作用域,以便能够拥有单独的视觉属性。

一个很好的例子可能是实现“点击编辑”行为:当你有一个 html 来查看某些东西而另一个要编辑时。

解决方案之一是创建具有独立作用域的 en 指令。但是,如果不同属性的 html 标记差异很大,您需要有一种“双重嵌入”(切换时手动编译模板)。

所以更简单的是有一些小的复制粘贴,但直接显示 View 中发生了什么。这大大简化了标记。

这是说明该问题的示例代码:

<span class="editable" >
  <span ng-hide="editing">
    {{user.first}} <span ng-click="editing = true"><i class="icon-pencil"></i></span>
  </span>
  <span ng-show="editing">
    <input type="text" ng-model="user.first"> 
    <span ng-click="editing = false"><i class="icon-ok"></i></span>
  </span>
</span>
<span class="editable" >
  <span ng-hide="editing">
    {{user.last}} <span ng-click="editing = true"><i class="icon-pencil"></i></span>
  </span>
  <span ng-show="editing">
    <input type="text" ng-model="user.last"> 
    <span ng-click="editing = false"><i class="icon-ok"></i></span>
  </span>
</span>

在这种情况下,首先想到的是“子作用域”。

但是我没有找到在 AngularJS 中简单地创建新范围的指令。有吗?

最佳答案

作为非常直接的解决方案之一,我编写了一个简单的单行指令:

.directive('childScope', function() {
  return { scope: true, restrict:'AE' }
});

并使用它只需添加到 <span class="editable" child-scope>在我的源示例中。

但是可能有一些标准指令可以这样做吗?

如果没有,我认为这个解决方案可能对其他人有用。

关于angularjs - 在 AngularJS 中创建子作用域的指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16959906/

相关文章:

angularjs - 更改指令中的 Controller 范围变量不会反射(reflect)在 Controller 功能中

javascript - 将服务器(c#/Razor)值传递到 AngularJS 应用程序的最佳方法

javascript - Angularjs:按数组相交排序和过滤

javascript - 如何在html中设置$compile代码

javascript - 数字字段解析中的 Angular 省略零

angularjs - $httpBackend.flush() 方法抛出错误 : [$rootScope:infdig] 10 $digest() iterations reached. 中止

javascript - Angular 尝试重置表单

javascript - 函数的 $q promise 在解析时不会将其值传播到 Angular View 中

angularjs - ngClick 不会在递归模板中触发

angularjs - Angular ui 路由器指令动态 ui-sref