javascript - Angular - 在 Bootstrap 上提取指令的属性值

标签 javascript angularjs

我有一个表单,其中包含一些已知的输入和一些包含在我无法控制但可以正确编写的部分中的内容。简化后如下所示:

<form ...>
  <input name="input1" type="hidden" value="1">
  <div class="from_partial" ng-controller="Controller">
    <!-- here goes first partial -->
    <button type="button" ng-click="check()">Check</button>
  </div>
  <div class="from_partial" ng-controller="Controller">
    <!-- here goes second partial -->
    <button type="button" ng-click="check()">Check</button>
  </div>
</form>

部分看起来像这样:

<div class="item">
  <input type="text" ng-model="name"/>
</div>
<div class="item">
  <input type="text" ng-model="age"/>
</div>

现在我需要以某种方式在 Controller 的 check() 函数中使用这些输入,分别为每个部分。我事先并不知道他们的名字。枚举它们的最佳方法是什么?当 Angular 引导并使用它们的 $scope 连接特定模型时,是否可以获取它们(即找出它们的名称)?

换句话说,我希望每个 Controller 对象知道输入的名称,例如 $scope.input_names 包含 {"name", “年龄”}

最佳答案

事实证明,可以定义多个具有相同名称的指令,这样就变得很容易:

angular.module(app_name)
.controller("Controller", ['$scope', function ($scope) {
    $scope.input_names = [];
    ...
}])
.directive('ngModel', function() {
    var linker = function(scope, element, attrs) {
        scope.input_names.push(attrs.ngModel);
    }

    return {
        restrict: 'A',
        priority: 100,
        require: '?ngModel',
        link: linker
    };
});

原始 Angular 指令的优先级为 1,将首先执行。然后,自定义指令会将使用 ng-model 属性定义的名称插入到 scope.input_names 中。这确保每个 Controller 只会获取相关部分中定义的名称。与 ng-model 相关的所有其他内容都将照常工作。

关于javascript - Angular - 在 Bootstrap 上提取指令的属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45631843/

相关文章:

javascript - jQuery $.delegate() 单个选择器多个事件还是 $.bind() 更好的解决方案?

php - 在服务器端(PHP/MySQL)还是在客户端(js)排序?

javascript - 组件通过一个 Controller 向另一个组件提供数据

javascript - AngularJS 和 Webpack 集成

javascript - 如何将所选下拉值传递给 ng-repeat orderby

javascript - 如果对象对象数组包含键,则 Angular 隐藏按钮

javascript - D3图表不显示

javascript - 如何使用 Knockout.js 将下拉列表中的选定项目自动更新到 SignalR 中的所有已连接客户端?

forms - Symfony 表单与 AngularJS $resource 不兼容

javascript - 在我的例子中,如何获取 Select 元素中的选定值?