小编han*_*nan的帖子

角度更改检测不适用于 HttpClinet.Subscribe 中的 ChangeDetectionStrategy.OnPush

我复制了一个简单的stackblitz,演示了我遇到的问题。问题是我有一个父组件将布尔值传递给子组件。这个布尔值是子组件上的@Input。需要注意的是,父组件使用ChangeDetectionStrategy.OnPush。子组件没有显式设置。

当父组件在订阅方法中更改子组件的布尔输入属性时,子组件最初不会检测到更改。总是需要单击 2 次才能让子组件检测到更改。

但是,当我在订阅方法之外更改子组件的布尔输入属性时,子组件会正确检测到更改,并且一切都会按预期工作(单击 1 次子组件即可识别更改)。

App.Component.ts(父组件)

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ],
  changeDetection: ChangeDetectionStrategy.OnPush,
})
export class AppComponent  {
  constructor(private http: HttpClient) {

  }
  public isHelloVisible: boolean;
  public useHttpGet: boolean;

  showHello() {
    if (this.useHttpGet) {
    this.http.get('https://cors-anywhere.herokuapp.com/https://api.darksky.net/forecast/cc0e3799790b0b34bdeb6fef28c3daf7/17.447409200000003,-78.3724573?units=si').subscribe(data => {
      this.isHelloVisible = true;  
    });
    } else {
      this.isHelloVisible = true;
    }
  }

  closeHello() {
    this.isHelloVisible = false;    
  }
Run Code Online (Sandbox Code Playgroud)

子组件(Hello.component.ts)

@Component({
  selector: 'hello',
  template: `<div *ngIf="showHello">
    Hello
    <div (click)="closeHello()">Click me to close Hello</div>
  </div>
  
  `, …
Run Code Online (Sandbox Code Playgroud)

observable angular2-changedetection angular angular-input

7
推荐指数
1
解决办法
1万
查看次数

Haskell 中的多态性

我是 Haskell 的新手,从第一原则开始阅读 Haskell。

顺便说一句,这个问题一般与本书无关,我以以下问题为例

在第 10 章,第 10.5 节,Q 5,f 部分

题:

以下是与您已经看到的非常相似的简单折叠,但每个折叠都至少有一个错误。请修复它们并在您的 REPL 中测试

f) 文件夹 const 'a' [1..5]

并且它给出了以下错误 No instance for (Num Char)来自文字“1” 在此处输入图片说明

只是意味着 1 不能在这里用作 Char

但我在本章中读到折叠就像文本重写器,用函数替换 cons(:) 并用累加器替换空列表,所以结果是(我缩短了列表)

foldr const 'a' [1..2] 
to 
(1 `const` (2 `const` 'a')) 
Run Code Online (Sandbox Code Playgroud)

并且它的工作没有编译器错误

那么有什么问题呢?为什么第一个不工作,它的重写工作?

但我看到重写的形式const有两种形式

Int -> Int -> Int 
and 
Int -> Char -> Int
Run Code Online (Sandbox Code Playgroud)

也许这是它的BCS所以我固定的类型,const像这样

cont :: Int -> Int -> Int
cont = const
Run Code Online (Sandbox Code Playgroud)

现在当我说使用它时

(1 `cont` (2 `cont` 'a'))

Couldn't …
Run Code Online (Sandbox Code Playgroud)

polymorphism haskell types ghci parametric-polymorphism

4
推荐指数
2
解决办法
114
查看次数

Unity:找不到UI布局元素的最大大小

在Unity UI中,LayoutElement具有最小,首选和固定大小,但没有max size属性。

例如,如果我有一个text1

layoutElement.flxibleWith = 1
layoutElement.minHeight  = 19
Run Code Online (Sandbox Code Playgroud)

text1 一行txt:

具有一行txt的text1

但是,当我在text1其中加载文本时,它的高度会无限扩展:

在此处输入图片说明

我已经编写了一个脚本:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

[ExecuteInEditMode]
[RequireComponent(typeof(LayoutElement))]

public class LayoutElementMaxSize : MonoBehaviour
{

private LayoutElement layoutElement;
private ContentSizeFitter contentSizeFitter;
private RectTransform rectransform;

public bool controllWidth;
public bool controllHeight;

public float maxHight;
public float maxWidth;

void Start()
{
    layoutElement = GetComponent<LayoutElement>();
    rectransform = GetComponent<RectTransform>();
}

public void Update()
{
    if(rectransform.hasChanged)
     {
        rectransform.hasChanged = false;

        if (controllHeight)
        {
            layoutElement.preferredHeight = -1;

            layoutElement.CalculateLayoutInputHorizontal();
            layoutElement.CalculateLayoutInputVertical(); …
Run Code Online (Sandbox Code Playgroud)

c# unity-game-engine unity3d-2dtools

3
推荐指数
1
解决办法
4142
查看次数

Haskell中的foldR尾递归吗?

我是 Haskell 的新手,从第一性原理开始阅读 Haskell,在第 384 页的折叠章节中,我遇到了FoldR,似乎它不是尾递归的

foldr :: (a -> b -> b) -> b -> [a] -> b
foldr f z [] = z
foldr f z (x:xs) = f x (foldr f z xs)
Run Code Online (Sandbox Code Playgroud)

1-我们可以让它尾递归吗?

2-它会被优化吗?

optimization haskell tail-recursion ghc fold

3
推荐指数
2
解决办法
154
查看次数

直接设置属性时ngOnChanges不触发

我使用了 ng-bootstrap 中的模态

在我的父组件中,我曾经modalService打开模态,然后使用将数据发送到模态componentInstance

在模态组件中,我用来ngOnChanges获取发送的数据。但未ngOnChanges触发。

堆栈闪电战

父组件

  public toAttach(): void {
    let modalRef = this.modalService.open(HelloComponent);
    modalRef.componentInstance.attachments = this.attachments;
  }
Run Code Online (Sandbox Code Playgroud)

模态成分

  ngOnChanges(changes: SimpleChanges) {
    console.log("start!");
    if (changes["attachments"] && changes["attachments"].currentValue) {
      console.log(changes["attachments"].currentValue);
    }
  }
Run Code Online (Sandbox Code Playgroud)

typescript angular

1
推荐指数
1
解决办法
1962
查看次数

Haskell 非函数递归(或值递归或递归 let 绑定)

我是 Haskell 的新手,从第一原则开始阅读 Haskell。

在第 10 章第 378 页中,我遇到了这种新语法

fibs = 1 : scanl (+) 1 fibs
Run Code Online (Sandbox Code Playgroud)

似乎 fibs 是一个函数 bcs 它在右侧被使用或调用

但它的类型是fibs :: Num a => [a]一个值

如何在它自己的定义中访问一个值?

如果我确实尝试查看 fibs 中的内容,它只会向无穷大打印。

和其他i = 1 + i完全有效语法的例子 ,

但是当我在 ghci 旁边运行它时,它也会停止它。

  • 如果它不是递归,它是什么类型的递归它是什么?
  • 执行流程是什么?
  • i如果根本没有分配,如何在右侧访问?
  • i右边第一次的价值是多少?
  • i右边的值是什么?

任何可以帮助的文章?

haskell ghci

-1
推荐指数
1
解决办法
144
查看次数