【发布时间】:2017-08-19 12:25:29
【问题描述】:
我有一个带有以下控制器的应用程序:
var app = angular.module('someApp', []);
app.controller('mainCtrl', function($scope, $timeout) {
$timeout(function() {
$scope.myObject = {
type: 'blaat'
}
}, 5000);
});
它有一个超时,在 5 秒后在 mainCtrl 上创建一个具有 type 属性的对象。我还定义了一个采用类型属性的组件:
app.component('createSome', {
templateUrl: 'create.html',
controller: 'createController as create',
bindings: {
type: '='
}
});
当该对象上的类型可用并将该类型传递给该组件时,该组件被渲染:
<body ng-controller="mainCtrl">
mainCtrl object: {{ myObject.type }}
<create-some
ng-if="myObject.type"
type="myObject.type">
</create-some>
</body>
该组件的控制器在初始化时正在创建一个具有该类型的新对象。这就是事情出错的地方。该对象永远不会获得 type 属性。当 createController 被初始化时,我还添加了一个额外的 console.log 并且在那里也看不到 type 属性。但是,该类型已正确打印在控制器上的组件内。
app.controller('createController', function($scope) {
var vm = this;
console.log('creating create controller', vm.type);
vm.newObject = {
type: vm.type
};
});
我猜这是某种时间问题;在控制器范围内设置组件属性之前,控制器正在初始化。我的问题是:我必须改变什么才能让组件控制器中的对象按需要工作。我唯一能想到但宁愿避免的事情就是使用手表。
我还创建了以下包含上述所有内容的 plunk:
https://plnkr.co/edit/XIfm1y6GBT2WcFKBvlPY
我问这个是因为我正在处理的应用程序中遇到类似的情况。奇怪的是,这似乎在所有环境的生产中都能正常工作。在本地运行代码时(使用带有browserify的gulp)它在Windows计算机上失败,但在我的macbook上却没有。哪种让我大吃一惊。它之前在 Windows 计算机上工作,并且在这之间没有发生任何代码更改。如果有人对此有解释会更好,但我已经对正确的处理方法感到高兴。 :-) 除了 plunk 在我测试它的任何机器上的行为都相同,所以它可能是项目其余部分特有的东西。
【问题讨论】:
标签: javascript angularjs angular-components