如何将 ng-model 的引用作为函数的参数传递?

How to pass ng-model's reference as a parameter of a function?

这就是我想要做的。我正在构建一个功能,人们可以使用该功能将 'previously saved content' 添加到文本区域。为了避免他们输入长内容,他们只需单击文本区域下方的锚点 link,查看包含可用内容的模式框,然后单击内容以填充文本框。查看下面的屏幕截图以了解更多上下文。

我在为 textarea 的 ng-model 设置新内容时遇到问题。我想在跨不同文本区域的应用程序中使用此功能。 ng-model 将是动态的。有什么方法可以在调用模态框并设置内容时将ng-model作为参考传递

<textarea ng-model="new_message.reply"></textarea>
<a ng-click="openSavedMessages()">
  Add a Saved Message
</a>

控制器代码

$scope.openSavedMessages = function(){
  var modalInstance = $uibModal.open({
      templateUrl: 'template.html',
      size: 'lg',
      controller:  "SavedMessagesController",
      scope: $scope
  });

  modalInstance.result.then(function(data){
    // dont want to do below
    // $scope.new_message.reply = data;
  }, function(){})
}

请注意,在我的案例中,范围变量 (ng-model) 因不同的文本区域而异。在某些地方,它是一个简单的变量,在某处它是一个对象的 属性,在某处它是对象数组中一个对象的 属性。所以只是把它作为一个字符串传递并在函数内部解析并不简单。

非常感谢!

您可能想使用 这个 作为参考。使用类似于:

     var newMessageAdd = function () {
        var self = this;
        self.openSavedMessages = function (ngModel) {
            var modalInstance = $uibModal.open({
                templateUrl: 'template.html',
                size: 'lg',
                controller: "SavedMessagesController",
                scope: $scope
            });
            modalInstance.result.then(function (data) {
                // dont want to do below
                // $scope.new_message.reply = data;
                self[ngModel] = data; //use this instead
            }, function () {
            })
        };
        self.getMessage = function () {
            if (!$scope.newMessage) {
                return self;
            }
            //put your logic here to get newMessage
            for (var key in $scope.newMessage) {
                self[key] = $scope.newMessage[key];
            }
            return self;
        };
    };

    $scope.newMessage = new newMessageAdd().getMessage();

然后您可以将 ngModel 传递给函数,同时通过模板调用它。

我建议你写指令,所以你有 html 比如:

<textarea ng-model="new_message.reply"></textarea>
<a add-save-message="new_message.reply">
  Add a Saved Message
</a>

在此指令中,您可以绑定单击、打开模式,然后在块中为给定的 属性 分配新值。

回答我自己的问题。这对我有用。感谢 Petr 的指点。

angular.module('app').
directive('savedMessages', function ($uibModal) {

    return {
        restrict: 'E',
        template: '<div><a ng-click="openSavedMessages()">Add a Saved Message</a></div>',
        require: '?ngModel',
        link: function (scope, element, attrs, ngModel){
            scope.openSavedMessages = function(){
                var modalInstance = $uibModal.open({
                    templateUrl: 'tpl/modals/saved_messages.html',
                    size: 'lg',
                    controller:  "SavedMessagesController",
                    scope: scope
                });

                modalInstance.result.then(function(data){
                  console.log(data);
                  ngModel.$setViewValue(data);
              }, function(){})
            }
        }
    };
});

并使用指令如下

<saved-messages ng-model="new_message.reply"></saved-messages>

不确定将其限制为属性 (A) 并将其绑定到点击是否会有任何不同。如果我能做得更好,请发表评论。谢谢!