0

我试图scope: {test:"="}在定义指令时使用符号来实现本地/父数据绑定。

但是,在下面的示例中,尽管console.log($scope.$parent);记录了父范围确实test定义了一个属性,但此代码仍会引发异常Expression 'undefined' used with directive 'testdirective' is non-assignable

如果我使用,则不再抛出异常scope: {test:"=?"},但是在父级和指令之间没有数据绑定$scope.test

TestCtrl 是视图的控制器。

我究竟做错了什么 ?

应用程序.js

var ng_app = angular.module('my_app',['ngRoute']);

ng_app.config(['$routeProvider', function($routeProvider){
    $routeProvider.
    when('/testroute/', {templateUrl: 'partials/test.html', controller:'TestCtrl'}).
    otherwise({redirectTo: '/testroute/'});
}]);

ng_app.controller('TestCtrl', function($scope){$scope.test = 0;});

ng_app.directive('testdirective', function()
{
    return {
        restrict:'E',
        scope: {test:"="}, // this complains that the parent.scope has no property 'test'
        controller: function($scope){
            // this logs a scope with adequate 'test' property defined:
            console.log($scope.$parent);                 
            $scope.test = 1;
        }
    }
});

部分/test.html

<testdirective></testdirective>

我使用角度 1.2.0rc3

4

1 回答 1

1

是的,scope: {test:"="}没有定义您想要超出父范围的内容。它定义了连接到封闭范围的属性。

因此,您需要在test声明中添加一个名为的属性:

<testdirective test="test"></testdirective>

为了更清楚一点,让我们将属性重命名为myModel

ng_app.directive('testdirective', function()
{
    return {
        restrict:'E',
        scope: {myModel:"="}, 
        link: function($scope){

            $scope.myModel = 1;
        }
    }
});

随着声明:

<testdirective myModel="test"></testdirective>
于 2013-10-21T12:14:39.590 回答