使用grunt构建项目时指令不可分配表达式(自动设置)

时间:2015-08-17 07:48:41

标签: angularjs

当我使用我的指令时出现此错误:

Error: [$compile:nonassign] Expression '' used with directive 'profileModifier' is non-assignable!

但是,只有在使用grunt构建项目时才会出现错误。它在devmode中工作。

我的指示:

angular.module('clientApp')
  .directive('profileModifier', function () {
    return {
      templateUrl: 'template/profile-modifier/profile-modifier.html',
      restrict: 'E',
      scope: {
        title: '=',
        enabled: '=',
        available: '=',
        show: '=',
        values: '=',
        columnTitleOne: '=',
        columnTitleTwo: '=',
        columnPropertyKeyOne: '=',
        columnPropertyKeyTwo: '=',
        uploadFn: '='
      },
      link: function postLink(scope, element, attrs) {

        scope.toggleOnOff = function(val){
          scope.enabled = val;
          if(!val){
            scope.show = false;
          }
        };

        scope.toggleShow = function(){
          scope.show = !scope.show;
        }

      }
    };
  });

标记:

<profile-modifier
    title="'Lutningsprofil'"
    enabled="selectedProfile.value.slope.enabled"
    available="selectedProfile.value.slope.available"
    show="selectedProfile.value.slope.show"
    values="selectedProfile.value.slope.values"
    column-title-one="'KM'"
    column-title-two="'Lutning (‰)'"
    column-property-key-one="'distance'"
    column-property-key-two="'slope'"
    upload-fn="openUploadModalSlope">
</profile-modifier>

使用函数scope.toggleOnOff时发生错误。出于某种原因,在构建项目时,无法再分配属性“已启用”。

selectedCrofile在我的ctrl:

中定义
$scope.profiles = InputFactory.getProfiles();
InputFactory.selectedProfile = {
  value: $scope.profiles[0]
};

$scope.selectedProfile = InputFactory.selectedProfile;

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您不应该将=用于您不想分配的内容。 请改用&,并在指令内作为函数调用访问该属性。

例如,对于:

columnTitleOne: '&',

在模板中使用它:

<div>{{columnTitleOne()}}</div>

并且在指令的javascript代码中是这样的:

doSomethingWithTitles($scope.columnTitleOne());

作为一项规则,您应该对要分配的内容使用双向绑定。我想,使用=来表示它的原因,提醒您应该如果您要在某处做这件事,请使用它:

columnTitleOne = something;

如果您不这样做,请不要使用双向绑定。