46

看看这个 Fiddle,我需要改变什么,模板中的表达式使用我在 HTML 中定义的参数进行评估?保存按钮应该调用blabla()控制器的-function,因为我通过了它?

var myApp = angular.module('MyApp',[])
myApp.directive('editkeyvalue', function() {
    return {
        restrict: 'E',
        replace: true,
        scope: {
            accept: "expression"
        },
        template : '<div><label class="control-label">{{key}}</label>' +
        '<label class="control-label">{{key}}</label>' +
          '<input type="text" ng-model="value" />'+
        '<button type="button" x-ng-click="cancel()">CANCEL</button>' +
        '<button type="submit" x-ng-click="save()">SAVE</button></div>',

      controller: function($scope, $element, $attrs, $location) {
        $scope.save= function() {
          $scope.accept();
        };
      }
    }
});

我并没有真正看透这一点。感谢帮助!

4

3 回答 3

46

property: '='您可以按照 Roy 的建议设置两种方式的数据绑定。因此,如果您想要两者keyvalue绑定到本地范围,您会这样做

scope: {
    key: '=',
    value: '='
},

由于您正在传递这些值,因此您可以在指令的控制器中访问它们。但是如果您想在父范围的上下文中运行一个函数,这似乎是您想要对accept属性执行的操作,那么您需要像这样告诉 Angular

scope: {
    accept: "&"
}

现在,从您的save方法中,您可以调用通过accept

controller: function($scope, $element, $attrs, $location) {
    $scope.save= function() {      
        $scope.accept()
    };
}

这是一个jsfiddle

于 2012-12-05T16:10:14.783 回答
15
scope: {
    accept: "&"
}

函数名使用小写字母,否则不起作用。

于 2013-09-15T07:50:21.730 回答
1

只是快速说明您不需要包装功能保存。只需在模板中调用它:

'<button type="submit" x-ng-click="accept()">SAVE</button></div>',

这会转置函数调用并按预期传递参数。

这简化了代码并使其更易于阅读。

于 2015-03-30T17:54:10.540 回答