Angularjs angular.js-将对象从指令传递到视图控制器

Angularjs angular.js-将对象从指令传递到视图控制器,angularjs,angularjs-directive,Angularjs,Angularjs Directive,*请注意:有一个Plunker链接: 首先,我想在指令单击事件上传递一个对象作为参数, (这对我来说太复杂了),所以我决定通过分别发送事件和对象来简化它 在我的程序中,对象在视图控制器中始终是未定义的,视图本身与Plunker示例相反 在Plunker示例中,它仅在第一个传递事件(第二个指令click事件正常工作)时在控制器上未定义 我不知道为什么我在简单的Plunker模拟和我的大量代码中得到了两个不同的结果,我希望这两种情况都是相同逻辑问题的两个不同结果 通过事件函数从指令中传递对象作为

*请注意:有一个Plunker链接:

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

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

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

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

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

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();
        } 
    }
}
函数PickerDirective()
{
返回{
限制:'E',
scope://独立作用域
{
obj:'=objD',
getObj:“&getObjD”
}, 
控制器:DirectiveController,
模板:`
单击我发送对象{{item.num}
`
};
函数定向控制器($scope,$element)
{
$scope.many=[{“num”:1,}];
$scope.sendObj=函数(){
$scope.obj={“a”:1,“b”:2,“c”:3};
$scope.getObj();
} 
}
}

如果您的案例更易于使用事件,请查看此Plunker:

主控制器

function mainController($scope)
{
    $scope.test = "work";
    $scope.getObj = function(){
        $scope.test = $scope.obj;
    }
}
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>' 
    }
指令控制器

function mainController($scope)
{
    $scope.test = "work";
    $scope.getObj = function(){
        $scope.test = $scope.obj;
    }
}
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>' 
    }
函数定向控制器($scope,$element)
{
$scope.many=[{“num”:1,}]
$scope.sendObj=函数(){
$scope.$emit('newObj',{“a”:1,“b”:2,“c”:3})
}
}
返回{
限制:'E',
控制器:DirectiveController,
模板:'单击我发送对象{{item.num}'
}

如果您的案例更易于使用事件,请查看此Plunker:

主控制器

function mainController($scope)
{
    $scope.test = "work";
    $scope.getObj = function(){
        $scope.test = $scope.obj;
    }
}
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>' 
    }
指令控制器

function mainController($scope)
{
    $scope.test = "work";
    $scope.getObj = function(){
        $scope.test = $scope.obj;
    }
}
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>' 
    }
函数定向控制器($scope,$element)
{
$scope.many=[{“num”:1,}]
$scope.sendObj=函数(){
$scope.$emit('newObj',{“a”:1,“b”:2,“c”:3})
}
}
返回{
限制:'E',
控制器:DirectiveController,
模板:'单击我发送对象{{item.num}'
}

你能告诉我$on中“事件”的用法吗?除了一些哲理性的定义外,我在网上找不到任何可靠的答案。链接或示例也将被接受:-)您是否检查了角度文档?,'event'是angular传递给回调的事件对象。你能告诉我$on中“event”的用法吗?除了一些哲学定义外,我在网上找不到任何可靠的答案。链接或示例也将被接受:-)您是否检查了角度文档?,'event'是通过angular传递给回调的事件对象