AngularJS 消化细微差别还是我只是愚蠢? ng 如果渲染组件两次?
AngularJS digest nuance or am I just dumb? ng if renders component twice?
不幸的是,我无法为这种情况创建可重现的片段。它发生在一个相当复杂的代码库中,足以说明。
我有一个组件方法 onClick
将标志设置为 true。
例如
// in the template
<button type='button' ng-click="onClick()"></button>
//javascript
angular.module('myModule')
.component('MyComponent', {
...
controller: [function(){
var ctrl = this;
ctrl.showModal = false;
ctrl.onClick = function() {
ctrl.showModal = true;
}
}]
})
此标志与 ng-if
一起使用,后者实例化另一个 $onInit
呈现模态的组件。例如
//in the template
<my-modal-component ng-if="$ctrl.showModal"></my-modal-component>
//javascript
angular.module('myModule')
.component('myModalComponent', {
...
controller: [function(){
// renders third party modal
var renderModal = function() {}
// makes and returns an api call to get some data as a promise
var getRelevantData = function(){}
this.$onInit = function () {
getRelevantData().then(function(){
renderModal();
})
}
}]
})
出于某些疯狂的原因,当单击按钮时,myModalComponent
实际上会得到两个单独的实例(即呈现两次,一个在另一个之上)。我知道范围有一些 ng-if
细微差别,但我在这里没有使用 $scope
,甚至将标志放在对象中也没有用。
ng-show
进行了一些 if 检查以呈现模态类型的作品,但我的数据绑定都搞砸了(我传递给 myModalComponent
的方法是在 ng-show 为 false 时定义的,但是当ng-show 更改为 true,它是未定义的)所以如果可以的话,我宁愿不要去那个兔子洞;另外,我认为 ng-if 在这里更有意义。
更疯狂的是,如果我在按钮单击时放置 $timeout(, 10000)
将标志设置延迟到 10 秒 (onClick
), 模态仍然呈现一次立即十秒后,另一个模态呈现在它上面。
诚然,我尽量远离摘要循环,因为我知道知道它很重要,但具有讽刺意味的是,它是一种反模式,可以搞砸...那么有人有什么想法吗?
我想念 React。
使用 angular 1.5.9 时出现问题。我看到了其他摘要问题,但独立处理了它们,但这个问题或多或少是一个表演障碍。所以升级到 1.8,问题就消失了。
不幸的是,我无法为这种情况创建可重现的片段。它发生在一个相当复杂的代码库中,足以说明。
我有一个组件方法 onClick
将标志设置为 true。
例如
// in the template
<button type='button' ng-click="onClick()"></button>
//javascript
angular.module('myModule')
.component('MyComponent', {
...
controller: [function(){
var ctrl = this;
ctrl.showModal = false;
ctrl.onClick = function() {
ctrl.showModal = true;
}
}]
})
此标志与 ng-if
一起使用,后者实例化另一个 $onInit
呈现模态的组件。例如
//in the template
<my-modal-component ng-if="$ctrl.showModal"></my-modal-component>
//javascript
angular.module('myModule')
.component('myModalComponent', {
...
controller: [function(){
// renders third party modal
var renderModal = function() {}
// makes and returns an api call to get some data as a promise
var getRelevantData = function(){}
this.$onInit = function () {
getRelevantData().then(function(){
renderModal();
})
}
}]
})
出于某些疯狂的原因,当单击按钮时,myModalComponent
实际上会得到两个单独的实例(即呈现两次,一个在另一个之上)。我知道范围有一些 ng-if
细微差别,但我在这里没有使用 $scope
,甚至将标志放在对象中也没有用。
ng-show
进行了一些 if 检查以呈现模态类型的作品,但我的数据绑定都搞砸了(我传递给 myModalComponent
的方法是在 ng-show 为 false 时定义的,但是当ng-show 更改为 true,它是未定义的)所以如果可以的话,我宁愿不要去那个兔子洞;另外,我认为 ng-if 在这里更有意义。
更疯狂的是,如果我在按钮单击时放置 $timeout(, 10000)
将标志设置延迟到 10 秒 (onClick
), 模态仍然呈现一次立即十秒后,另一个模态呈现在它上面。
诚然,我尽量远离摘要循环,因为我知道知道它很重要,但具有讽刺意味的是,它是一种反模式,可以搞砸...那么有人有什么想法吗?
我想念 React。
使用 angular 1.5.9 时出现问题。我看到了其他摘要问题,但独立处理了它们,但这个问题或多或少是一个表演障碍。所以升级到 1.8,问题就消失了。