当我使用我的指令时出现此错误:
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;
有什么想法吗?
答案 0 :(得分:0)
您不应该将=
用于您不想分配的内容。
请改用&
,并在指令内作为函数调用访问该属性。
例如,对于:
columnTitleOne: '&',
在模板中使用它:
<div>{{columnTitleOne()}}</div>
并且在指令的javascript代码中是这样的:
doSomethingWithTitles($scope.columnTitleOne());
作为一项规则,您应该对要分配的内容使用双向绑定。我想,使用=
来表示它的原因,提醒您应该如果您要在某处做这件事,请使用它:
columnTitleOne = something;
如果您不这样做,请不要使用双向绑定。