【问题标题】:angular.js - passing an object from directive to the view controllerangular.js - 将对象从指令传递到视图控制器
【发布时间】:2023-03-19 05:59:01
【问题描述】:

*请注意:有一个 Plunker 链接: https://plnkr.co/edit/PAINmQUHSjgPTkXoYAxf?p=preview

起初我想在指令点击事件上传递一个对象作为参数, (这对我来说太复杂了),所以我决定通过分别发送事件和对象来简化它。

在我的程序中,视图控制器中的对象始终未定义,视图本身与 Plunker 示例相反。

在 Plunker 示例中,仅在第一个传递事件(第二个指令点击事件工作正常)时在控制器上未定义。

  • 我不知道为什么我在简单的 Plunker 模拟和我的大量代码中得到 2 个不同的结果,我希望这两种情况都是同一个逻辑问题的 2 个不同结果。
  • 同样欢迎通过事件函数将对象作为参数从指令传递的解决方案。

HTML

<pick-er get-obj-d="getObj()" obj-d="obj"></pick-er>

视图控制器

function mainController($scope)
{
    $scope.test = "work";
    $scope.getObj = function(){
        $scope.test = $scope.obj;
    }
}

指令:

function PickerDirective()
{
    return {
        restrict: 'E',
        scope: // isolated scope
        {
            obj : '=objD',
            getObj: '&getObjD'
        }, 
        controller: DirectiveController,
        template:`<div ng-repeat="item in many">
                      <button ng-click="sendObj()">
                          Click on me to send Object {{item.num}}
                      </button>
                  </div>`
    };


    function DirectiveController($scope, $element)
    {
        $scope.many =[{"num":1,}];
        $scope.sendObj = function() {
            $scope.obj = {"a":1,"b":2, "c":3};
            $scope.getObj();
        } 
    }
}

【问题讨论】:

    标签: angularjs angularjs-directive


    【解决方案1】:

    我你的情况,使用事件会更简单,看看这个Plunker:

    https://plnkr.co/edit/bFYDfhTqaUo8xhzSz0qH?p=preview

    主控制器

    function mainController($scope)
    {
    console.log("mainCTRL ran")
    $scope.test = "work";
      $scope.$on('newObj', function (event, obj) {
        $scope.obj = obj;
        $scope.test = obj;
      });
    }
    

    指令控制器

    function DirectiveController($scope, $element)
        {
         $scope.many =[{"num":1,}]
            $scope.sendObj = function() {
              $scope.$emit('newObj', {"a":1,"b":2, "c":3} )
            }
        }
    
        return {
            restrict: 'E',
            controller: DirectiveController,
            template:'<div ng-repeat="item in many"><button ng-click="sendObj()">Click on me to send Object {{item.num}}</button></div>' 
        }
    

    【讨论】:

    • 你能告诉我 $on 中“事件”的用法吗,除了一些哲学定义之外,我在网上找不到任何可靠的答案。链接或示例也将被接受:-)
    • 你检查过角度文档吗? docs.angularjs.org/api/ng/type/$rootScope.Scope,'event'是angular传给回调的事件对象
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    • 2018-10-29
    • 1970-01-01
    相关资源
    最近更新 更多