映射没有值的组件属性

时间:2018-02-28 09:33:26

标签: angular custom-attributes

我在为Angular组件提供属性之后。通过属性我的意思是你在HTML中放置的切换式布尔属性,而没有指定属性的值:

而不是输入(这不是我想要的):

如果存在<my-component compact="compact">,则组件应将其值强制为布尔值:

  1. <my-component compact="true> //&lt; = true
  2. <my-component compact="false"> //&lt; = true
  3. compact //&lt; = true?
  4. 如果<my-component compact>没有值,则映射为true:

    1. compact //&lt; = true
    2. 如果遗漏了<my-component>

      1. constructor( @Attribute('compact') public compact, ) { console.log(this.compact) // `null` for <my-component compact> } //&lt; = false
      2. 但是当我没有属性值时,组件看到null,所以我无法区分大小写#4和#5,即使我在构造函数中提供了默认值。

        def BudgetView(request):
        
            import pdb
            pdb.set_trace()
        
            if request.user.is_authenticated:
                U=request.user
        
                #initalize formset factories
                ItemFormSet = modelformset_factory(Item, fields=(blabla), extra=0)
                CatFormset=modelformset_factory(BudgetCatagory, fields=(blabla), extra=0)
        
                #initalize Constants
                InitiateConstants(CatagoryItemsList)
        
                if request.method=='POST':
                    FormsetItem=ItemFormSet(request.POST,initial=Item.objects.filter(budgetcatagory__user_id=U.id).values())
                    FormsetCat=CatFormset(request.POST)
                    if FormsetItem.is_valid():
        -bla
        -bla
        -bla
        
                    return redirect('/HighLevelInput')
                else:
                    #populate
                    I=Item.objects.filter(budgetcatagory__user_id=U.id)
                    C=BudgetCatagory.objects.filter(user_id=U.id)
        
                    #initiate initial catagories and items for new user
                    if (not I.exists()) or (not C.exists()):
                        Item.objects.filter(budgetcatagory__user_id=U.id).delete()
                        BudgetCatagory.objects.filter(user_id=U.id).delete()
                        InitiateNewUser(U)
                        I=Item.objects.filter(budgetcatagory__user_id=U.id)
                        C=BudgetCatagory.objects.filter(user_id=U.id)
                    FormsetItem=ItemFormSet(queryset=I)
                    FormsetCat=CatFormset(queryset=C)
        
                return render(request,'getdata/budgetmachine.html', {'FormsetItem':FormsetItem, 'FormsetCat':FormsetCat })
            else:
                return redirect('/login')
        

        我应该怎么做?是否具有属性装饰器

1 个答案:

答案 0 :(得分:1)

在#1~4的情况下,compact的值的类型将始终为字符串。

如果是#4,则compact的值为空字符串(类型为string),而情况#5将为 null (类型为object),因此您可以通过typeof(compact)区分情况#4和#5。