我有以下指令:

CorrelatorApp.directive('correlator', function ($WebApi) {
    return {
        restrict: 'A',
        scope: {
            crOptions: '=',
        },

        link: function (scope, element, attrs) {
            var options = scope.crOptions;
        }
    }
});


然后在我的index.html中像这样使用它:

<form correlator cr-options="correlatorOptions" name="CorrelatorForm" ng-controller="PortalMerchantController">


和我的correlatorOptions在控制器中定义:

CorrelatorApp.controller(“ PortalMerchantController”,函数

PortalMerchantController($scope, $http) {
    $scope.correlatorOptions = {
        dependant: {
            controller: 'PortalMerchant',
            model: 'portalMerchants',
            nameField: 'PortalsMerchantName'
        },
        principal: {
            controller: 'Merchant',
            model: 'merchants',
            nameField: 'Name'
        }
    };
});


当指令链接时,scope.crOptions的值未定义。如果将crOptions设置为&,然后调用它(var options = scope.crOptions()),则代码将正确执行,并且我获得了控制器中定义的对象。我想念什么?

最佳答案

ngController指令移到form元素之外。

在1.2.0及更高版本中,ngControllerform具有同级作用域(以前它们将共享隔离范围)。 Here's the change that causes this

您希望formngController的子级,以便它可以访问其范围:

<div ng-controller="PortalMerchantController">
   <form correlator cr-options="correlatorOptions" name="CorrelatorForm"></form>


working fiddle

10-08 04:45