Phi*_*vin 8 javascript iife angularjs
我在我的控制器中指定了一个函数,如下所示:
$scope.myFunction = function(){ console.log('test'); }
Run Code Online (Sandbox Code Playgroud)
我希望在更改选择框时触发此功能.因此,我对select元素应用ng-change,如下所示:
<select ng-options="..." ng-model="..." ng-change="myFunction();"></select>
Run Code Online (Sandbox Code Playgroud)
但我也想在我的页面加载时触发myFunction函数.所以我想把我的功能变成IIFE:
($scope.myFunction = function(){ console.log('test'); }());
Run Code Online (Sandbox Code Playgroud)
但是,现在该功能仅在页面加载时触发,而不是由ng-change触发.我注意到当我更改括号时,该函数也会被ng-change触发:
($scope.myFunction = function(){ console.log('test'); })();
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么这甚至重要吗?
非常感谢!
axe*_*uch 10
这有很大的不同
($scope.myFunction = function(){ console.log('test'); }());
Run Code Online (Sandbox Code Playgroud)
还有这个
($scope.myFunction = function(){ console.log('test'); })();
Run Code Online (Sandbox Code Playgroud)
因为第一行分配函数调用的结果,然后只存储它,但它不是它存储的函数.
第二个按预期工作,因为您在分配函数后调用该函数 $scope.myFunction
UPDATE
正如helpermethod在评论中指出的那样,第一行不是IIFE,因为你不是在调用函数本身,而只是调用它的结果.
没有看到你的所有代码,很难说.您没有使用IIFE,您正在执行自己的函数并将其设置为$ scope变量.此外,IIFE不会使其在页面加载时运行.而不是尝试纠正所有这些,尝试使用更像下面的示例的代码.
尝试在IIFE中创建控制器并像这样更新HTML:
<div ng-controller="MyCtrl as vm">
<select ng-options="vm.someOptions"
ng-model="vm.someModel"
ng-change="vm.myFunction()"></select>
</div>
Run Code Online (Sandbox Code Playgroud)
和你的控制器
(function(){
angular.module('myapp').controller('MyCtrl', MyCtrl);
function MyCtrl() {
var vm = this;
vm.someModel;
vm.someOptions = []; // set these
vm.myFunction = myFunction;
activate();
function activate() {
myFunction();
}
function myFunction() {
// TODO: will be called onchange and
// when controller starts
}
}
})();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4782 次 |
| 最近记录: |