Angular form指令 - 如何将ng-model属性设置为通过作用域传入的值

时间:2016-08-20 00:03:03

标签: angularjs angularjs-directive angular-ngmodel

我有这个表单部分(简化问题):

    public string CalculateElapsedPercent(DateTime endTime, DateTime startTime)
    {
        string result = string.Empty;
        DateTime currentTime = DateTime.Now;
        if (currentTime > endTime)
        {
            result = " (100 %)";
            return result;
        }
        long nr = (currentTime - startTime).Ticks;
        long dr = (endTime - startTime).Ticks;
        double value = ((double)nr / (double)dr) * 100.0;
        result = " (" + value.ToString() + " %)";
        return result;
    }

而我真的想做这样的事情:

<label>firstitem brand: </label><input ng-model="ctrl.object.item_attributes[0].brand">
<label>firstitem model: </label><input ng-model="ctrl.object.item_attributes[0].name">

<label>seconditem brand: </label><input ng-model="ctrl.object.item_attributes[1].brand">
<label>seconditem model: </label><input ng-model="ctrl.object.item_attributes[1].name">

作为一名Angular新手,我很难理解如何通过我的指令设置ng-model。我已经尝试直接通过范围传递它,并通过指令的链接功能,但没有运气。有什么想法吗?&#39;

编辑:

我按照Steff的建议尝试了以下指令:

<form-directive item="ctrl.object.item_attributes[0]"></form-directive>

<form-directive item="ctrl.object.item_attributes[1]"></form-directive>

我的输入格式如下:

function fixIt () {
  return {
    restrict: 'EA',
    require: "ngModel",
       link: function (scope, elem, attrs, ngModel) {
           attrs.ngModel = scope.comp
// scope.com = object.item_attributes[i]

       }
  }
};

angular
  .module('app')
  .directive('fixIt', fixIt);

我收到以下错误:angular.self-7f8df3e ... .js?body = 1:13921错误:[ngModel:nonassign] Expression&#39;&#39;是不可转让的。

如果我在输入中给ng-model一个初始值,那么错误就会消失,但我在fixIt指令里面的链接函数中没有做任何事情。

1 个答案:

答案 0 :(得分:0)

如果要通过指令设置ng-model,可以考虑以下方法:

指令代码

(function(angular) {
    'use strict';
    angular.module('your_module_name',[]).directive('your_directive_name', function() {
    return {
        restrict: "EA",
        require: 'ngModel',
        link: function (scope, elem, attrs, ngModel) {
        // accessing the ng-model value by using attr.ngModel
        }
    };
});
})(window.angular);

请记住包含您的指令:

var myApp = angular.module('myapp', [ 'your_module_name']);

HTML代码

<input your-directive-name ng-model="">

我将这个方法用于我的闪亮指令,它运行得很好。 对于表单验证和其他特定于输入的设置,您可以查看此stackoverflow问题:Angularjs: form validation and input directive

如果对您的问题有任何误解,请告诉我,并希望这可以帮助您:)。

修改

我不确定为什么你将ng-model留空并将$scope变量绑定在你的指令中。也许正在尝试

<div ng-repeat="item in ctrl.object.item_attributes">
    <input fix-it ng-model="item">
</div>