【问题标题】:How to get input values outside the custom directive如何在自定义指令之外获取输入值
【发布时间】:2016-02-08 11:11:36
【问题描述】:

我需要在指令(num1,num2) 之外获取输入值,以便在单击按钮时计算其中的结果(加法)。正确的方法是什么? 这是我的html

<div ng-app="sumApp" >
  <div ng-controller='sumAppCtrl' > 
    <input  ng-model='num1' type='text'  >
    <span>+</span>
    <input   ng-model='num2'  type='text'>
    <span>=</span>
    <bp-sum></bp-sum>
    <input type="button" value="Sum" ng-click="sumNumbers(num1,num2)" />
   </div>
</div>   

还有js代码:

var sumApp = angular.module('sumApp', []);

sumApp.controller("sumAppCtrl", function ($scope) {

});


sumApp.directive('bpSum',function( ){

return  {

    restrict:'E',
    controller:
        sumNumbers = function(num1,num2){

        var items=[parseInt(num1),parseInt(num2)];
        $scope.addition = _.reduce(items, function(memo, num){ return memo + num; }, 0);
    },
    template:"<input type='text' ng-model='addition' />"

}


})

【问题讨论】:

  • 不太清楚你在这里问什么。该指令没有隔离范围,它与它的父级共享$scope。在这种情况下,$scope.addition 应该在父级中的任何位置可用。这并不是设计指令的最佳方式,但它就是这样设计的。
  • @Claies,问题是我的指令不能这样定义 num1 和 num2
  • 它们是 $scope 上的属性,试试 $scope.num1
  • @Claies,感谢您的帮助,它有效,但仍有一些问题我必须自己解决。
  • 由于它没有隔离范围,因此父数据很容易获得。如果数据不可用,那么您可以处理广播事件和发送 dara

标签: angularjs angularjs-directive angular-ngmodel


【解决方案1】:

据我说..你应该像这样开发加法组件

<div ng-app="sumApp" >
  <div ng-controller='sumAppCtrl' > 

    <bp-sum></bp-sum>

   </div>
</div> 

指令

    sumApp.directive('bpSum', function() {

    return {

        restrict: 'E',
        controller: function($scope) {

            $scope.sumNumbers = function(num1, num2) {

                var items = [parseInt(num1), parseInt(num2)];
                $scope.addition = _.reduce(items, function(memo, num) {
                    return memo + num;
                }, 0);
            };

        },
        template: " <input  name='num1' ng-model='num1' type='text'  >" +
            "<span>+</span>" +
            "<input   name='num2' ng-model='num2'  type='text'>" +
            "<span>=</span><input type='button' value='Sum' ng-click='sumNumbers(num1,num2)'' />"+
            "<label>Sum is : </label> <input type='text' ng-model='addition' />"


    };


});

【讨论】:

  • 是的,我知道这样做从逻辑上讲更聪明,但我想主要是想获得指令之外的值。
猜你喜欢
  • 1970-01-01
  • 2013-05-17
  • 2021-03-23
  • 2021-09-13
  • 1970-01-01
  • 2019-07-11
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
相关资源
最近更新 更多